Y小y 发表于 2020-7-20 11:58:54

内外函数同名变量问题

def outside():
    var = 5
    def inside():
      print(var)
      var = 8
    inside()
outside()

为什么这段代码会报错,我知道这是python屏蔽保护外面的那个var,但是里面的函数不是先执行print(var),再执行var = 8 吗,那不是在执行print(var)的时候还没有屏蔽外面的 var 吗,那不是就可以打印出来吗,为什么不可以呢?


qiuyouzhi 发表于 2020-7-20 12:02:38

函数定义过程不代表调用...

Twilight6 发表于 2020-7-20 12:05:04

本帖最后由 Twilight6 于 2020-7-20 12:06 编辑



为什么这段代码会报错,我知道这是python屏蔽保护外面的那个var,但是里面的函数不是先执行print(var)?

再执行var = 8 吗,那不是在执行print(var)的时候还没有屏蔽外面的 var 吗,那不是就可以打印出来吗,为什么不可以呢?

没错,是先执行 print(var) 的,但是在 inside() 函数里面的作用域里,因为你 重新赋值了 var

导致触发屏蔽机制了,而这个屏蔽机制是在你运行代码前就会触发的

就像 Python 的语法错误、缩进错误,Python 会在运行代码前自动检测,而不是运行代码后

页: [1]
查看完整版本: 内外函数同名变量问题