2024-04-23 22:24:48 发布
网友
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。为什么会这样?你知道吗
好吧,我在教授的幻灯片中找到了这样的推理:
“类块中定义的名称范围仅限于类块;它不扩展到方法的代码块-这包括理解和生成器表达式,因为它们是使用函数范围实现的。”—赵一宝博士
所以在示例2中,list((a+i表示范围(3)中的i))是列表理解的示例。因此,它采用全局名称空间a=0。它不识别类块a()中定义的a=42。你知道吗
希望有人能审查我的推理,我不确定它是否完全正确。你知道吗
好吧,我在教授的幻灯片中找到了这样的推理:
“类块中定义的名称范围仅限于类块;它不扩展到方法的代码块-这包括理解和生成器表达式,因为它们是使用函数范围实现的。”—赵一宝博士
所以在示例2中,list((a+i表示范围(3)中的i))是列表理解的示例。因此,它采用全局名称空间a=0。它不识别类块a()中定义的a=42。你知道吗
希望有人能审查我的推理,我不确定它是否完全正确。你知道吗
相关问题 更多 >
编程相关推荐