第五季 发表于 2020-6-26 15:56:35

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

def outside():

    var = 5

    def inside():

      var = 3

      print(var)

      

    inside()



outside()

Twilight6 发表于 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 打印的

heidern0612 发表于 2020-6-26 16:20:09

本帖最后由 heidern0612 于 2020-6-26 16:22 编辑

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

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

inside调用打印,outside没啥返回值,所以结果就一个3了。
页: [1]
查看完整版本: 谁能帮忙解释下这段为啥没错啊 内嵌函数不是修改了全局变量了吗