小白求问LEGB的相关内容
x = 1def test():
x = 2
print(x)
class C:
x = 3
print(x)
def m1(self):
print(x)
print(self.x)
def m2(self):
x = 4
print(x)
self.x = 5
def m3(self):
print(x)
print(self.x)
c = C()
c.m1()
c.m2()
c.m3()
求问classC下面的x = 3是属于LEGB的哪一个? 在这个例子中,class C下面的x = 3属于L(Local)。
LEGB是Python中变量作用域的规则,其中L(Local)表示本地作用域,即函数或类中定义的变量。在这个例子中,x = 3是在类C的定义中定义的,因此它在类C的本地作用域中。在类的方法中,使用self.x来引用类C的实例变量x,而在方法m1和m3中,使用print(x)来引用本地变量x,它们都指的是在函数test中定义的本地变量x,值为2。在方法m2中,使用x = 4创建了一个新的本地变量x,它的作用域仅限于方法m2中。self.x = 5将类C的实例变量x的值更改为5。 isdkz 发表于 2023-9-13 17:02
在这个例子中,class C下面的x = 3属于L(Local)。
LEGB是Python中变量作用域的规则,其中L(Local)表 ...
那请问为什么print(x)引用的是本地变量x=2(按我的理解它应该是属于嵌套函数的外层作用域E?),而不是x = 3?{:5_99:} 离柒 发表于 2023-9-13 17:20
那请问为什么print(x)引用的是本地变量x=2(按我的理解它应该是属于嵌套函数的外层作用域E?),而不是x...
chatgpt的回答是错误的,x = 3 并不在LEGB的范畴,而是在 C 这个类的命名空间中的 币
页:
[1]