1

这是我的问题。

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

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

谢谢!

4

1 回答 1

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

这样,您可以将全局保存在命名空间中,并且还可以使您的整体代码更整洁。

于 2013-07-12T15:23:36.693 回答