为什么会出现这个UnboundLocalError(关闭)?

新手上路,请多包涵

我在这里做错了什么?

 counter = 0

def increment():
  counter += 1

increment()

上面的代码抛出一个 UnboundLocalError

原文由 Randomblue 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 319
2 个回答

Python 没有变量声明,所以它必须自己弄清楚变量的 范围。它通过一个简单的规则来做到这一点:如果在函数内部对变量进行赋值,则该变量被视为局部变量。 [1]因此,这条线

counter += 1

隐式地使 counter 局部于 increment() 。但是,尝试执行此行将尝试读取局部变量 counter 在分配之前的值,从而导致 UnboundLocalError[2]

如果 counter 是全局变量,则 global 关键字会有所帮助。如果 increment() 是局部函数并且 counter 是局部变量,则可以在 Python 3.x 中使用 nonlocal

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题