【发布时间】:2021-11-29 14:01:28
【问题描述】:
以下代码在 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) 行上抛出运行时错误?
为什么变量
a和b按预期打印,而c引发错误?
我能想到的唯一解释是 local 变量 c 是由赋值 c+=1 创建的,它甚至在“全局”变量 c 之前创建局部变量。当然,在变量存在之前“窃取”作用域是没有意义的。
有人可以解释一下这种行为吗?
【问题讨论】: