以下代码可在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)行时,我在(A)行获得了
UnboundLocalError: 'c' not assigned
。正确打印了a
和b
的值。这使我完全困惑,原因有两个:a
和b
,而c
引发错误? 我能提出的唯一解释是,分配
c
创建了本地变量c+=1
,甚至在创建本地变量之前,它就比“全局”变量c
优先。当然,在变量存在之前“窃取”范围是没有意义的。有人可以解释这种现象吗?
最佳答案
Python对函数中的变量的处理方式有所不同,具体取决于您是从函数内部还是外部为其分配值。如果在函数内分配了变量,则默认情况下会将其视为局部变量。因此,当取消注释该行时,您将尝试在分配任何值之前引用局部变量c
。
如果希望变量c
引用该函数之前分配的全局c = 3
,请输入
global c
作为函数的第一行。
至于python 3,现在有
nonlocal c
您可以用来引用最近的包含
c
变量的封闭函数范围。
关于python - 首次使用后重新分配时,局部变量上出现UnboundLocalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64554600/