为什么会发生此 UnboundLocalError(关闭)?[重复]
- 2024-11-22 08:47:00
- admin 原创
- 12
问题描述:
我在这里做错了什么?
counter = 0
def increment():
counter += 1
increment()
上述代码抛出一个UnboundLocalError
。
解决方案 1:
Python 没有变量声明,因此它必须自己确定变量的作用域。它通过一个简单的规则来实现这一点:如果在函数内部对变量进行赋值,则该变量被视为局部变量。[1] 因此,以下行
counter += 1
隐式地将counter
局部变量设置为。但是,尝试执行此行时,将尝试在分配increment()
局部变量之前读取该变量的值,从而导致。[2]counter
`UnboundLocalError`
如果counter
是全局变量,则该global
关键字会有所帮助。如果increment()
是局部函数和counter
局部变量,则可以nonlocal
在 Python 3.x 中使用。
解决方案 2:
您需要使用全局语句来修改全局变量计数器,而不是局部变量:
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'
解决方案 3:
回答你主题行中的问题,*是的,Python 中有闭包,但它们只适用于函数内部,而且(在 Python 2.x 中)它们是只读的;你不能将名称重新绑定到其他对象(但如果对象是可变的,你可以修改其内容)。在 Python 3.x 中,你可以使用关键字nonlocal
来修改闭包变量。
def incrementer():
counter = 0
def increment():
nonlocal counter
counter += 1
return counter
return increment
increment = incrementer()
increment() # 1
increment() # 2
该问题最初询问的是 Python 中的闭包。
解决方案 4:
您的代码抛出的原因UnboundLocalError
已在其他答案中得到很好的解释。
但在我看来,你正在尝试构建一些像 一样工作的东西itertools.count()
。
所以尝试一下,看看它是否适合你的情况:
>>> from itertools import count
>>> counter = count(0)
>>> counter
count(0)
>>> next(counter)
0
>>> counter
count(1)
>>> next(counter)
1
>>> counter
count(2)
解决方案 5:
Python 默认具有词法作用域,这意味着虽然封闭的作用域可以访问其封闭作用域中的值,但它不能修改它们(除非使用global
关键字将它们声明为全局的)。
闭包将封闭环境中的值绑定到本地环境中的名称。然后本地环境可以使用绑定的值,甚至可以将该名称重新分配给其他内容,但无法修改封闭环境中的绑定。
在您的情况下,您尝试将其视为counter
局部变量而不是绑定值。请注意,此代码将分配的值绑定x
在封闭环境中,可以正常工作:
>>> x = 1
>>> def f():
>>> return x
>>> f()
1
解决方案 6:
要修改函数内部的全局变量,必须使用 global 关键字。
当你尝试在没有线的情况下执行此操作时
global counter
在增量的定义内部,创建了一个名为 counter 的局部变量,以防止您弄乱整个程序可能依赖的计数器变量。
请注意,只有在修改变量时才需要使用全局;您可以从增量中读取计数器,而不需要全局语句。
解决方案 7:
尝试一下:
counter = 0
def increment():
global counter
counter += 1
increment()
解决方案 8:
Python 不是纯粹的词汇范围。
请参阅在函数中使用全局变量。
以及关于 Python 变量范围的注释。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件