当我运行以下代码时:
def run():
test = False
def tester():
if not test:
print("test is false")
else:
print("test is true")
test = not test
tester()
run()
我收到错误:
分配前引用的局部变量'test'
我的印象是子函数可以访问父函数变量。在玩了这段代码后,我发现如果我删除了作业(test = not test
),那么一切正常。
为什么在子函数中有一个赋值会破坏这段代码?如果我不应该在子函数中进行赋值,那么切换test
标志的最佳方法是什么?我应该从子函数返回一个值并使用它来切换test
吗?
答案 0 :(得分:2)
Python 2不支持对嵌套函数关闭的变量进行赋值。通常的解决方法是将值放在可变容器中(例如,一个元素列表)。 Python 3为此提供了nonlocal
关键字。