鱼C论坛

 找回密码
 立即注册
查看: 1177|回复: 2

谁能帮忙解释下这段为啥没错啊 内嵌函数不是修改了全局变量了吗

[复制链接]
发表于 2020-6-26 15:56:35 | 显示全部楼层 |阅读模式

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

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

x
def outside():

    var = 5

    def inside():

        var = 3

        print(var)

        

    inside()



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

使用道具 举报

发表于 2020-6-26 16:02:21 | 显示全部楼层
你要了解 Python 的屏蔽机制(Ps:都是指没有 global 和 nonlocal声明下,因为如果声明了就不是局部变量了):

当函数内部的变量函数外部全局作用域的变量名相同时,会触发 Python 的屏蔽机制,函数内部会创建一个同名的局部变量

来暂时覆盖同名的全局变量,此时在函数内部的值都为这个局部变量,只要一出此函数,那么该局部变量就不复存在,变会原来的全局变量


所以并不是修改了全局变量,而是暂时屏蔽 覆盖了全局变量,一旦你出了 inside 函数 var 就变回了 5

这里的 var = 5 相对于 函数 inside 是全局变量噢~ 而 var 3 是局部变量,你可以在调用 inside 函数下面多打印一次 var 就能看出来 全局变量并没有发生改变
def outside():
    var = 5

    def inside():
        var = 3
        print(var)

    inside() # 先进入 inside 函数 打印了 var
    print(var)  # 出了函数再次打印 var 

outside()
结果为:
3  # 这个是 inside 函数里的print 打印的
5  # 这个是 outside 函数的print 打印的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 16:20:09 | 显示全部楼层
本帖最后由 heidern0612 于 2020-6-26 16:22 编辑

你这哪有全局变量?不全是内部变量么?

另外建议楼主贴代码段,你这太不清晰了。

inside调用打印,outside没啥返回值,所以结果就一个3了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 05:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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