请考虑下面的Python代码片段:
x = 1
class Foo:
x = 2
def foo():
x = 3
class Foo:
print(x) # prints 3
Foo.foo()
正如预期的那样,这张照片打印了3张.
x = 1
class Foo:
x = 2
def foo():
x = 3
class Foo:
x += 10
print(x) # prints 11
Foo.foo()
如果我们在上面的例子中切换两行的顺序,结果会再次改变:
x = 1
class Foo:
x = 2
def foo():
x = 3
class Foo:
print(x) # prints 1
x += 10
Foo.foo()
我想了解为什么会发生这种情况,更一般地说,我想了解导致这种行为的范围规则.根据LEGB范围规则,我希望这两个代码段都打印3、13和3,因为在封闭函数foo()
中定义了x
.