为什么输出不是1和1?

Par*_*007 5 python python-3.x

a = 0
b = 0
def test():
    a = 1
    b = 1

    class Test:
        print(a, b)
        a = 2
test()
Run Code Online (Sandbox Code Playgroud)

它给

0 1
Run Code Online (Sandbox Code Playgroud)

它应该是

1 1
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

小智 0

在函数内部test,您实际上并没有初始化一个新Test对象,因此 Python 将读取类定义以在函数作用域内使用它,因此它会执行 print 语句。问题是您试图更改类范围内的值,这会导致采用函数定义之外a的先前值。a