我在这里做错了什么?
counter = 0
def increment():
counter += 1
increment()
上面的代码抛出一个 UnboundLocalError
。
原文由 Randomblue 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在这里做错了什么?
counter = 0
def increment():
counter += 1
increment()
上面的代码抛出一个 UnboundLocalError
。
原文由 Randomblue 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要使用 global 语句,以便修改全局变量计数器,而不是局部变量:
counter = 0
def increment():
global counter
counter += 1
increment()
如果 counter
定义的封闭范围不是全局范围,则在 Python 3.x 上您可以使用 nonlocal 语句。在 Python 2.x 上的相同情况下,您将无法重新分配给非本地名称 counter
,因此您需要使 counter
可变并修改它:
counter = [0]
def increment():
counter[0] += 1
increment()
print counter[0] # prints '1'
原文由 Andrew Clark 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答861 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
Python 没有变量声明,所以它必须自己弄清楚变量的 范围。它通过一个简单的规则来做到这一点:如果在函数内部对变量进行赋值,则该变量被视为局部变量。 [1]因此,这条线
隐式地使
counter
局部于increment()
。但是,尝试执行此行将尝试读取局部变量counter
在分配之前的值,从而导致UnboundLocalError
。 [2]如果
counter
是全局变量,则global
关键字会有所帮助。如果increment()
是局部函数并且counter
是局部变量,则可以在 Python 3.x 中使用nonlocal
。