小编Kri*_*oss的帖子

为什么在全局范围而不是封闭范围中查找未初始化的类变量?

这不是我编码项目需要的问题,但我的一个朋友把这个问题发给了我。问题是:这里打印了什么?为什么?

x = 0
y = 0
def f():
    x = 1
    y = 1
    class A:
        print(x,y)
        x = 2
f()
Run Code Online (Sandbox Code Playgroud)

输出:

0 1
Run Code Online (Sandbox Code Playgroud)

我的第一直觉告诉我应该是“1 1”,但我错了。我摆弄了代码,发现如果我删除“x = 2”,我会是正确的。但为什么?

此外,当我将变量设为全局时,它也起作用了。像这样:

x = 0
y = 0
def f():
    global x
    global y
    x = 1
    y = 1
    class A:
        print(x,y)
        x = 2
f()
Run Code Online (Sandbox Code Playgroud)

输出:

1 1
Run Code Online (Sandbox Code Playgroud)

我不是在寻找问题的其他解决方案,只是更好地了解这里发生的事情。

提前致谢

python variables class function

4
推荐指数
1
解决办法
79
查看次数

标签 统计

class ×1

function ×1

python ×1

variables ×1