使用全局变量进行选项传递?

时间:2013-07-12 14:55:58

标签: python

这是我的问题。

我有一个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的值。但我不确定在这种情况下使用全局变量是一个好主意。

我们有更好的解决方案吗?

谢谢!

1 个答案:

答案 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()

通过这种方式,您可以将全局保留在命名空间中,还可以使整个代码保持整洁。