以下代码可在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的值打印正确。这让我完全困惑,原因有二:
unbundlocalerror:"c"
我能想到的唯一解释是,局部变量c是由赋值c+=1创建的,它甚至在创建局部变量之前就已经取代了“全局”变量c。当然,一个变量在它存在之前“偷走”范围是没有意义的。
c+=1
Python对函数中的变量的处理方式不同,这取决于你是从函数内部还是外部为变量赋值。如果在函数中分配了变量,则默认情况下将其视为局部变量。因此,当你取消对行的注释时,你试图在为其赋值之前引用局部变量c。 如果你希望变量c引用在函数之前分配的全局c=3,请输入
c
c=3
global c
作为函数的第一行。
至于python 3,现在有
nonlocal c
可以用来引用最近的包含c变量的封闭函数范围。