gpt4 book ai didi

Python:关于变量范围。为什么我不需要将 x 传递给 Y?

转载 作者:太空狗 更新时间:2023-10-29 21:29:08 26 4
gpt4 key购买 nike

考虑以下代码,为什么我不需要将 x 传递给 Y?

class X:    
def __init__(self):
self.a = 1
self.b = 2
self.c = 3

class Y:
def A(self):
print(x.a,x.b,x.c)

x = X()
y = Y()
y.A()

感谢最重要的答案,他们确实帮助我了解了问题所在,即对变量范围的误解。我希望我能选择两个作为正确答案,因为它们以自己的方式启发。

最佳答案

当 python 将 def 编译成函数时,它会尝试确定您引用的内容是否是本地的 - 如果不是,则您必须引用全局的。例如:

def f():
print(x)

嗯,你还没有在 f 的范围内定义 x,所以你一定是指一个全局的。

这就是您上述代码中发生的所有事情。您尚未在 A 范围内定义 x,因此 x 必须是全局的。碰巧,您定义了全局:

x = X()

调用之前:

y = Y()
y.A()

所以一切顺利。

如果你要说“嗯,我不确定我是否相信你,roippi”,请查看字节码:

dis.dis(Y.A)
3 0 LOAD_GLOBAL 0 (print)
3 LOAD_GLOBAL 1 (x) # aha
6 LOAD_ATTR 2 (a)
9 LOAD_GLOBAL 1 (x) # aha!
12 LOAD_ATTR 3 (b)
15 LOAD_GLOBAL 1 (x) # aha!!
18 LOAD_ATTR 4 (c)
21 CALL_FUNCTION 3 (3 positional, 0 keyword pair)
24 POP_TOP
25 LOAD_CONST 0 (None)
28 RETURN_VALUE

啊哈。

关于Python:关于变量范围。为什么我不需要将 x 传递给 Y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com