将参数传递给嵌套函数

时间:2020-05-15 19:38:19

标签: python parameter-passing

我有一个通过命令行参数设置的标志。该标志由嵌套了许多层的函数使用。将标志(或任何其他变量)传递给深度嵌套函数的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)

2 个答案:

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

这样,您可以在任何嵌套深度访问类变量,而无需直接将这些变量传递给调用堆栈。这也使您可以在以后开发的其他方法中访问这些变量,而不必重新实例化这些值。