鱼C论坛

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

小白求问LEGB的相关内容

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

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

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

x
x = 1
def 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的哪一个?
想知道小甲鱼最近在做啥?请访问 -> 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。
想知道小甲鱼最近在做啥?请访问 -> 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?
想知道小甲鱼最近在做啥?请访问 -> 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 这个类的命名空间中的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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