最佳答案
以下代码在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)时,我在行(一)处得到一个UnboundLocalError: 'c' not assigned
。a
和b
的值被正确打印。我不明白:
为什么在(一)行引发运行时错误,因为后面的语句在(B)行?
a
和b
按预期打印,而print(c)
引发错误?
我能想到的唯一解释是赋值c+=1
创建了一个当地的变量c
,它优先于全局变量c
。但是一个变量怎么能“偷”?存在之前的范围?为什么c
显然是本地的?
另见在函数中使用全局变量用于简单地关于如何从函数中重新分配全局变量的问题,和是否有可能在python中修改变量,在外部,但不是全局,范围?用于从封闭函数(闭包)重新赋值。见为什么是't 'global'关键字需要访问全局变量?用于OP 期望错误但没有得到错误的情况,通过简单地访问没有global
关键字的全局变量。