这是我的问题。
我有一个main()接受一个命令行选项,比如说foo,这是一个布尔值。然后main()调用一堆函数,main()调用fcn1(),fcn1()调用fcn2(),fcn2()调用fcn3(),fcn3()调用fcn4(),fcn4()调用fcn5(),然后在函数fcn5()中我们到达使用选项foo的地方。
我可以看到两个选项将此选项传递给fcn5()。
首先,对于调用链中的每个函数,都有一个名为foo的函数参数,并通过这些参数传递foo。这看起来有点乱。所有函数都需要有一个函数参数,但对于fcn1 - fcn4,它们并没有真正使用。
另一种选择是拥有一个全局变量,在main()中,我设置全局变量g_foo,然后在fcn5()中,它读取g_foo的值。但我不确定在这种情况下使用全局变量是一个好主意。
我们有更好的解决方案吗?
谢谢!
答案 0 :(得分:1)
将函数放在一个类中可能是有意义的。这是一个简单的例子,这里的函数没有做任何有趣的事情,但可以用你的代码替换。
import sys
class MyClass:
def __init__(self, arg):
self.arg = arg
def fn1(self):
return self.fn2() # just as a simple example which calls other functions
def fn2(self):
return self.fn3()
def fn3(self):
return self.fn4()
def fn4(self):
return self.fn5()
def fn5(self):
return self.arg
def main():
m = MyClass(arg=sys.argv[1])
print m.fn1() # prints output based on command line argument
if __name__ == '__main__':
main()
通过这种方式,您可以将全局保留在命名空间中,还可以使整个代码保持整洁。