【发布时间】:2021-02-09 20:17:17
【问题描述】:
这不是我在编码项目中需要的问题,但我的一个朋友把它发给了我。 问题是:这里打印出什么?为什么?
x = 0
y = 0
def f():
x = 1
y = 1
class A:
print(x,y)
x = 2
f()
输出:
0 1
我的第一直觉告诉我应该是“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()
输出:
1 1
我不是在寻找解决问题的其他方法,只是为了更好地了解这里发生的事情。
提前致谢
【问题讨论】:
-
这是来自 a tweet 的 Guido van Rossum,他是从 kevmod's blog 获得的。
-
太糟糕了,博客文章中指向原始 python-dev 线程的链接已失效(尽管它可能引用了PEP-227 上的线程)。
标签: python function class variables