鱼C论坛

 找回密码
 立即注册
查看: 1580|回复: 1

[已解决]关于嵌套&局部变量的理解

[复制链接]
发表于 2021-6-12 16:36:35 | 显示全部楼层 |阅读模式

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

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

x
def outside():
    var = 5
    def inside():
        var = 3
        print(var)
        
    inside()
outside()
这个跑出来是3
我想的是:执行outside(),首先var=5,然后执行inside(),但是var=3这句,相当于【想要修改非全局变量的外部变量,但是不能修改,所以自动创建一个同名变量】,而3则是这个同名变量被赋的值,print打印的也是这个同名变量【也就是inside()内的局部变量】。
这样理解对吗?
最佳答案
2021-6-12 16:44:31
本帖最后由 Twilight6 于 2021-6-12 16:45 编辑


应该可以这么说:

因为 inside 是 outside 的内嵌函数,所以 var = 5 相对于 内嵌函数 inside 来说属于全局变量

而 inside 中的 var = 3 就相对于 outside 来说是局部变量,同样,触发屏蔽机制的条件是一样的

所以此时 var = 3 时,因为外部有 var = 5 这个同名全局变量(相对于 var = 3 而言)

此时触发屏蔽机制,临时创建同名变量 var ,暂时屏蔽外部变量 var = 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-12 16:44:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2021-6-12 16:45 编辑


应该可以这么说:

因为 inside 是 outside 的内嵌函数,所以 var = 5 相对于 内嵌函数 inside 来说属于全局变量

而 inside 中的 var = 3 就相对于 outside 来说是局部变量,同样,触发屏蔽机制的条件是一样的

所以此时 var = 3 时,因为外部有 var = 5 这个同名全局变量(相对于 var = 3 而言)

此时触发屏蔽机制,临时创建同名变量 var ,暂时屏蔽外部变量 var = 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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