我正在尝试访问在函数外部声明的变量。然后每当我更改函数内部的变量值时,我都会看到一条错误消息......
UnboundLocalError:在赋值之前引用的局部变量'x'
这是模块......
x = 5
def fun():
print 'x is', x
x = 10
print 'x is now changed to', x
fun()
似乎Python假设函数内部声明的x与函数外部声明的x不同。此外,当我在第5行注释时,程序运行没有错误。
这与Python函数之类的任何规则相关的任何内容都会优先考虑其中声明的变量,如果我想做这样的程序,那么我必须使用global
语句来实现目标吗?
答案:好的我觉得我理所当然。感谢@unixer为我提供了链接 - Python documentation on the topic。实际上,当我们在任何范围内声明变量时,变量变为该特定范围的本地变量,并且它会在其范围之外隐藏任何类似命名的变量,除非该变量在本地或外部范围内获得另一个新赋值。就我而言......
x
赋值时,x
成为该特定范围的局部变量。x
编译器打印值fun
内部获取x
的值时。x
(第5行)分配新值时,编译器再次为x
分配了新值。但是这次它认为我犯了一个错误,因为我在为它分配值之前尝试打印x
(第4行)。第3点与......相同。
print 'x is', x
x = 5
编译器将引发相同的错误,因为我在尝试打印x的值之前会为其分配任何值。