Python-首次使用后重新分配局部变量时出现unbundLocalERROR
以下代码可在Python 2.5和3.0中正常运行:
a, b, c = (1, 2, 3)print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
但是,当我取消对行(B)的注释时,会得到一个unbundlocalerror:"c"
未在行(A)处分配。a和b的值打印正确。这让我完全困惑,原因有二:
- 为什么由于行(B)的后面的语句而在行(A)抛出运行时错误?
- 为什么在按预期方式打印变量a并引发错误?bc
我能想到的唯一解释是,局部变量c是由赋值c+=1
创建的,它甚至在创建局部变量之前就已经取代了“全局”变量c。当然,一个变量在它存在之前“偷走”范围是没有意义的。
回答:
Python对函数中的变量的处理方式不同,这取决于你是从函数内部还是外部为变量赋值。如果在函数中分配了变量,则默认情况下将其视为局部变量。因此,当你取消对行的注释时,你试图在为其赋值之前引用局部变量c。
如果你希望变量c
引用在函数之前分配的全局c=3
,请输入
global c
作为函数的第一行。
至于python 3,现在有
nonlocal c
可以用来引用最近的包含c
变量的封闭函数范围。
以上是 Python-首次使用后重新分配局部变量时出现unbundLocalERROR 的全部内容, 来源链接: utcz.com/qa/425113.html