我有一个通过命令行参数设置的标志。该标志由嵌套了许多层的函数使用。将标志(或任何其他变量)传递给深度嵌套函数的pythonic方法是什么?像我在下面所做的那样,将其添加到每个参数列表中感觉不正确。
def func3(flag var3, var4):
...
# flag is used only here
if flag;
do something
else:
do something else
def func2(flag, var1, var2):
...
x=func3(flag, c, d)
def func1(flag, var1, var2)
...
y = func2(flag, a, b)
def def main():
...
parser.add_agrument('-f', '--flag', action='store_true' default=false)
...
result = func1(flag, foo, bar)
答案 0 :(得分:4)
如果您不想像其他人已经建议的那样使用Class,并且需要一种简单的变通办法,而不会改变代码,请在所有CAPS中的模块中使用全局变量
此外,在我看来,这就像我们使用环境变量的方式一样。单个变量,这是自我解释的,并且最不可能被任何人错误地更改。
def func3(var3, var4):
...
# flag is used only here
if SOME_DISTINCT_FLAG;
do something
else:
do something else
def func2(var1, var2):
...
x=func3(c, d)
def func1(var1, var2):
...
y = func2(a, b)
def def main():
...
parser.add_argument('-f', '--flag', action='store_true' default=false)
...
# this lets you access global variables
# without it, the variable will be of local scope
global SOME_DISTINCT_FLAG
SOME_DISTINCT_FLAG = flag
result = func1(foo, bar)
此外,您可以在顶部定义它,以明确其含义,并设置默认值。没有松动的末端。
答案 1 :(得分:1)
考虑使用一个类:
WebElement
这样,您可以在任何嵌套深度访问类变量,而无需直接将这些变量传递给调用堆栈。这也使您可以在以后开发的其他方法中访问这些变量,而不必重新实例化这些值。