python全局变量,这是怎么回事?需要解释

2024-04-19 19:02:02 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下这是怎么回事吗

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只有在需要局部修改全局变量时才有用。你知道吗


Tags: 代码iniffoomainlocaldefline
3条回答

一开始看起来很奇怪的是,本地名是静态检测的:如果函数中的名称x被分配到了任何地方,Python会假定x是函数中的本地名任何地方。你知道吗

换句话说,函数中的行顺序是有误导性的:只要在函数中的某个地方指定了x,第一行的x就变成了对局部变量的引用(在这个代码点上仍然是未绑定的)。你知道吗

一旦对函数中的任何地方进行赋值x,它就成为局部变量,即使在赋值之前有对其值的引用。你知道吗

在函数中,赋值给x时没有global声明,因此x是一个局部变量。但是,在将函数赋值给之前,您尝试读取函数中的x,因此此时有一个未绑定的局部变量。你知道吗

相关问题 更多 >