簡體   English   中英

Python中的全局實例與本地實例

[英]Global vs local instances in Python

我是一個沒有太多CS背景的自學成才的程序員。 我在這里閱讀了很多有關Python中的全局變量主題的討論,但是我仍然不清楚何時使用全局是“良好的編程習慣”。

假設我編寫了一個Python腳本,該腳本對文件夾中的每個樣本執行了幾次長時間的計算。 我創建了一個簡單的類,其中包含每個計算的結果,因此一旦腳本完成,我就可以打印摘要文件。

class SampleInfo():

    def __init__(self):
        self.dict = {}

    def add_sample(self, sample):
        self.dict[sample] = {}

    def add_value(self, sample, value)
        self.dict[sample] = value

我看到兩種編寫主腳本的方式:

A)使用全局語句:

import os

def LongComputation(sample):
    # do some stuff that results in a value
    Info.add_value(sample, value)

def main():
    global Info
    Info = SampleInfo()
    for sample in os.listdir("."):
        LongComputation(sample)

main()

B)如果沒有全局語句,則將實例傳遞給函數:

import os

def LongComputation(sample, info_instance=None):
    # do some stuff that results in a value
    info_instance.add_value(sample, value)

def main():
    Info = SampleInfo()
    for sample in os.listdir("."):
        LongComputation(sample, info_instance=Info)

main()

特別是當我有幾種類型的Info類和許多LongComputation函數時,選項B)變得非常混亂。 另一方面,不建議使用全局語句。

我應該在A)上使用B)嗎? 為什么?

我不明白為什么需要在這里使用全局變量,您可以在將值添加到Info對象之前先進行計算並返回它。 當一個簡單的字典工作得很好時,該類也是多余的。

import os

def LongComputation(sample):
    # do some stuff that results in a value
    return value

def main():
    Info = {}
    for sample in os.listdir("."):
        Info[sample] = LongComputation(sample)

main()

何時使用全局變量:

  1. 當它是一個常數
  2. 當是單身時
  3. 當它是私人緩存時

也許,當您的腳本是一種快速,簡單的技巧時;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM