我是一位没有太多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)吗?为什么?
答案 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)
何时使用全局变量:
也许,当你的剧本是一个快速的,一次性的黑客; - )