鱼C论坛

 找回密码
 立即注册
查看: 2379|回复: 4

小白求问LEGB的相关内容

[复制链接]
发表于 2023-9-13 17:02:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. x = 1
  2. def test():
  3.     x = 2
  4.     print(x)
  5.     class C:
  6.         x = 3
  7.         print(x)
  8.         def m1(self):
  9.             print(x)
  10.             print(self.x)
  11.         def m2(self):
  12.             x = 4
  13.             print(x)
  14.             self.x = 5
  15.         def m3(self):
  16.             print(x)
  17.             print(self.x)
  18.         c = C()
  19.         c.m1()
  20.         c.m2()
  21.         c.m3()
复制代码

求问classC下面的x = 3是属于LEGB的哪一个?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-9-13 17:02:49 | 显示全部楼层

回帖奖励 +5 鱼币

在这个例子中,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。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-13 17:20:01 | 显示全部楼层
isdkz 发表于 2023-9-13 17:02
在这个例子中,class C下面的x = 3属于L(Local)。

LEGB是Python中变量作用域的规则,其中L(Local)表 ...

那请问为什么print(x)引用的是本地变量x=2(按我的理解它应该是属于嵌套函数的外层作用域E?),而不是x = 3?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-13 17:30:46 | 显示全部楼层

回帖奖励 +5 鱼币

离柒 发表于 2023-9-13 17:20
那请问为什么print(x)引用的是本地变量x=2(按我的理解它应该是属于嵌套函数的外层作用域E?),而不是x  ...

chatgpt的回答是错误的,x = 3 并不在LEGB的范畴,而是在 C 这个类的命名空间中的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-13 17:31:25 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 17:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表