Python 将参数传递到嵌套函数中

Python 将参数传递到嵌套函数中,python,parameter-passing,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(f

我有一个通过命令行参数设置的标志。该标志由嵌套许多层的函数使用。什么是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)

考虑使用一个类:

课堂示例: 定义初始自我,标志,a,b,c: self.flag=flag self.a=a self.b=b self.c=c self.d=d def func3self: ... 国旗只在这里使用 如果是自我标志; 做点什么 其他: 做点别的 def func2self: ... x=func3self.flag,self.c,self.d def FUNC1自身 ... y=func2self.flag,self.a,self.b
通过这种方式,您可以在任何嵌套深度访问类变量,而无需通过调用堆栈直接传递变量。这还允许您在以后开发的其他方法中访问这些变量,而无需重新实例化这些值。

考虑使用类:

课堂示例: 定义初始自我,标志,a,b,c: self.flag=flag self.a=a self.b=b self.c=c self.d=d def func3self: ... 国旗只在这里使用 如果是自我标志; 做点什么 其他: 做点别的 def func2self: ... x=func3self.flag,self.c,self.d def FUNC1自身 ... y=func2self.flag,self.a,self.b
通过这种方式,您可以在任何嵌套深度访问类变量,而无需通过调用堆栈直接传递变量。这还允许您在以后开发的其他方法中访问这些变量,而无需重新实例化这些值。

如果您不想像其他人建议的那样使用类,并且需要一个简单的解决方案,不需要更改代码,请在该模块中的所有CAP中使用全局变量

而且,在我看来,这就像我们如何使用环境变量。单一变量,这是不言自明的,最不可能被任何人错误地更改

def func3var3、var4: ... 国旗只在这里使用 如果某个_不同_标志; 做点什么 其他: 做点别的 def func2var1,var2: ... x=func3c,d def func1var1、var2: ... y=2a,b def干管: ... parser.add_参数'-f','-flag',action='store_true'default=false ... 这允许您访问全局变量 没有它,变量将是局部作用域 全局某些\u不同\u标志 一些不同的标志=标志 结果=func1foo,bar
此外,您可以在顶部定义它,以明确它是什么,并设置一个默认值。没有任何漏洞。

如果您不想像其他人建议的那样使用类,并且需要一个简单的解决方案,而不需要更改代码,请在该模块中的所有CAP中使用全局变量

而且,在我看来,这就像我们如何使用环境变量。单一变量,这是不言自明的,最不可能被任何人错误地更改

def func3var3、var4: ... 国旗只在这里使用 如果某个_不同_标志; 做点什么 其他: 做点别的 def func2var1,var2: ... x=func3c,d def func1var1、var2: ... y=2a,b def干管: ... parser.add_参数'-f','-flag',action='store_true'default=false ... 这允许您访问全局变量 没有它,变量将是局部作用域 全局某些\u不同\u标志 一些不同的标志=标志 结果=func1foo,bar
此外,您可以在顶部定义它,以明确它是什么,并设置一个默认值。没有松散的结尾。

您不使用类有什么特殊原因吗?如果您创建了一个类变量并使所有这些函数都成为类方法,那么这种情况很容易消除。如果标志只声明一次并且没有更改,这可能是我建议使用全局变量的少数情况之一。您不使用类的任何特殊原因?如果您创建了一个类变量,并将所有这些函数设置为类方法,则可以很容易地消除这种情况。如果只声明了一次标志并且没有更改,这可能是我建议使用全局变量的少数情况之一