gpt4 book ai didi

python - 当你在类/函数内外都声明了同名变量时,你怎么知道将使用变量的哪个值?

转载 作者:行者123 更新时间:2023-11-28 19:03:41 25 4
gpt4 key购买 nike

a=0
b=1
class A:
a=42
b=list((a,a+1,a+2))
x=A()
print(x.b)

输出:[42, 43, 44]

对比

a=0
b=1
class A:
a=42
b=list((a+i for i in range(3)))
x=A()
print(x.b)

输出:[0, 1, 2]

所以在第一个例子中,使用了a=42。但是在第二个例子中,使用了a=0。为什么会这样?

最佳答案

好的,我在教授的幻灯片中找到了这个推理:

“在类 block 中定义的名称范围仅限于类 block ;它不会扩展到方法的代码块 - 这包括理解和生成器表达式,因为它们是使用功能范围。” ——赵一宝博士

所以在示例 2 中,list((a+i for i in range(3))) 是列表理解的示例。因此,它采用全局 namespace a=0。它无法识别在类 block A() 中定义的 a=42。

希望有人能验证我的推理,我不确定它是否完全正确。

关于python - 当你在类/函数内外都声明了同名变量时,你怎么知道将使用变量的哪个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766508/

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