nononoyes 发表于 2018-3-5 15:04:34

为啥代码A不报错代码B却报错

代码A:
def outside():
    var = 5
    def inside():
      var = 3
      print(var)
      
    inside()
outside()

代码B
def outside():
    var = 5
    def inside():
      print(var)
      var = 3
      
    inside()
outside()

°蓝鲤歌蓝 发表于 2018-3-5 15:12:38

因为在inside()函数中print(var)在var前面,所以print(var)里的var它没有找到,就报错了。

achun 发表于 2018-3-5 15:42:50

因为在inside()函数中print(var)在var前面,因此var没有被定义,但是如果你在print(var)前面加上global var,表示该函数内的var使用的是全局变量,这样也不会报错。

achun 发表于 2018-3-5 15:47:29

achun 发表于 2018-3-5 15:42
因为在inside()函数中print(var)在var前面,因此var没有被定义,但是如果你在print(var)前面加上global var ...

测试了一下,这样好像不行,这种是闭包,这样处理不行,对不起,误导你了

achun 发表于 2018-3-5 15:49:14

achun 发表于 2018-3-5 15:47
测试了一下,这样好像不行,这种是闭包,这样处理不行,对不起,误导你了

但是可以将global改成nonlocal就可以了

nononoyes 发表于 2018-3-5 15:57:03

achun 发表于 2018-3-5 15:49
但是可以将global改成nonlocal就可以了

非常感谢
页: [1]
查看完整版本: 为啥代码A不报错代码B却报错