Python中的全局vs本地实例

时间:2014-06-02 09:13:59

标签: 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)变得非常混乱。另一方面,不鼓励使用全局声明。

我应该使用B)而不是A)吗?为什么?

2 个答案:

答案 0 :(得分:2)

我不明白为什么你需要在这里使用全局,你可以在将值添加到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 :(得分:0)

何时使用全局变量:

  1. 当它是一个常数
  2. 当它是单身人士时
  3. 当它是私有缓存时
  4. 也许,当你的剧本是一个快速的,一次性的黑客; - )