有人能解释一下这是怎么回事吗
x = 10
def foo():
print "x in foo = ",x
if x: x = 8 -------------> mysterious line
foo()
print "x in main = ",x
在上面的代码中,如果我注释掉神秘的一行(如果x:x=8)
我得到输出
x in foo = 10
x in main = 10
否则我就错了
"UnboundLocalError: local variable 'x' referenced before assignment"
为什么会这样?你知道吗
我知道global x
只有在需要局部修改全局变量时才有用。你知道吗
一开始看起来很奇怪的是,本地名是静态检测的:如果函数中的名称
x
被分配到了任何地方,Python会假定x
是函数中的本地名任何地方。你知道吗换句话说,函数中的行顺序是有误导性的:只要在函数中的某个地方指定了
x
,第一行的x
就变成了对局部变量的引用(在这个代码点上仍然是未绑定的)。你知道吗一旦对函数中的任何地方进行赋值
x
,它就成为局部变量,即使在赋值之前有对其值的引用。你知道吗在函数中,赋值给
x
时没有global
声明,因此x
是一个局部变量。但是,在将函数赋值给之前,您尝试读取函数中的x
,因此此时有一个未绑定的局部变量。你知道吗相关问题 更多 >
编程相关推荐