【发布时间】:2020-08-05 10:14:15
【问题描述】:
我有一个函数使用全局 x 变量作为其参数的默认值。但是,在if __name__ == '__main__': 块中调用的main() 函数中,我希望允许用户更改此变量以修改函数的行为。这似乎不起作用,因为当我在函数中运行脚本 x 在这种情况下已经被 9 占用并且没有更改为 10,因为我想要它。
x = 9
def function(var=x):
print(var)
def main():
global x
x = 10
function()
if __name__ == '__main__':
main()
在main() 中简单地调用function(var=x) 在我的情况下是行不通的,因为function() 实际上是一个装饰器,而是:
from module import decorator
x = 9
@decorator(var1=x, var2=15)
def function():
pass
def main():
global x
x = 10
function()
if __name__ == '__main__':
main()
另外,装饰器是从另一个模块导入的,所以我认为Defining a default argument as a global variable 中发布的答案可能也不起作用。更复杂的是,装饰器也应该接受其他参数,因此使用下面 kederrac 建议的类也不起作用。但是,由于这个模块是我自己制作的,我可以将必要的代码复制到我的新脚本中,但如果可能的话,我想避免这种情况。
非常感谢您的帮助!
【问题讨论】:
标签: python python-3.x decorator global