鱼C论坛

 找回密码
 立即注册
查看: 3157|回复: 5

[已解决]大佬帮帮忙 求助legb

[复制链接]
发表于 2023-3-27 17:09:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wang1313131313 于 2023-3-27 17:11 编辑

为啥是20 不是10呢 屏幕截图 2023-03-27 170809.png
最佳答案
2023-3-27 17:17:13
当我们调用 outer() 函数时,首先会定义局部变量 a 并将其值设置为 10。然后调用 inner() 函数。在 inner() 函数中,我们试图打印变量 a 的值。

然而,inner() 函数没有定义局部变量 a,所以它会在它的外围作用域中寻找变量 a。在这个例子中,inner() 函数并没有直接嵌套在 outer() 函数内,所以它不会直接访问 outer() 函数的局部变量。而是在全局作用域中寻找变量 a。

在全局作用域中,变量 a 的值为 20。因此,当 inner() 函数执行 print(a) 时,它打印的是全局变量 a 的值,即 20。所以,程序的输出为 20,而不是 10。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-27 17:17:13 | 显示全部楼层    本楼为最佳答案   
当我们调用 outer() 函数时,首先会定义局部变量 a 并将其值设置为 10。然后调用 inner() 函数。在 inner() 函数中,我们试图打印变量 a 的值。

然而,inner() 函数没有定义局部变量 a,所以它会在它的外围作用域中寻找变量 a。在这个例子中,inner() 函数并没有直接嵌套在 outer() 函数内,所以它不会直接访问 outer() 函数的局部变量。而是在全局作用域中寻找变量 a。

在全局作用域中,变量 a 的值为 20。因此,当 inner() 函数执行 print(a) 时,它打印的是全局变量 a 的值,即 20。所以,程序的输出为 20,而不是 10。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-27 17:19:14 | 显示全部楼层
isdkz 发表于 2023-3-27 17:17
当我们调用 outer() 函数时,首先会定义局部变量 a 并将其值设置为 10。然后调用 inner() 函数。在 inner() ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-27 17:23:12 | 显示全部楼层
isdkz 发表于 2023-3-27 17:17
当我们调用 outer() 函数时,首先会定义局部变量 a 并将其值设置为 10。然后调用 inner() 函数。在 inner() ...

请问那么这个例子符合legb原则吗?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-27 17:29:17 | 显示全部楼层
wang1313131313 发表于 2023-3-27 17:23
请问那么这个例子符合legb原则吗?谢谢

这个例子符合LEGB原则。LEGB原则是Python中用于解析变量名的顺序规则,它代表以下四个层次的作用域:

1、Local(局部):指当前函数或方法内部的作用域。
2、Enclosing(外围):指包含当前函数的外部函数的作用域,从内到外的顺序。
3、Global(全局):指当前脚本或模块的作用域。
4、Built-in(内置):指Python内置的名字空间,包含了Python的内置函数和异常等。


在这个例子中,当inner()函数试图访问变量a时,解释器会按照LEGB原则进行查找:

1、Local(局部):在inner()函数内部没有找到变量a。
2、Enclosing(外围):inner()函数没有外围函数,因为它并不是outer()函数的内部函数。
3、Global(全局):在全局作用域中找到了变量a,其值为20。
4、Built-in(内置):在这个例子中,我们不需要查找内置作用域。

根据LEGB原则,解释器在全局作用域中找到了变量a,因此inner()函数打印的是20。所以这个例子确实符合LEGB原则。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-27 17:58:22 | 显示全部楼层
isdkz 发表于 2023-3-27 17:29
这个例子符合LEGB原则。LEGB原则是Python中用于解析变量名的顺序规则,它代表以下四个层次的作用域:

...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 04:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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