hero533 发表于 2020-11-18 17:12:32

第二十讲有大佬吗?

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

outside()




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

outside()
                                              都改变了全局变量,为什么第二个会报错

兰竹皋 发表于 2020-11-18 17:16:18

本帖最后由 兰竹皋 于 2020-11-18 17:19 编辑

在Python中,不可在同一个函数中既调用全局变量又创建同名变量。(除非改变全局的值)
你第一个例子中,改变了变量,相当于重新创建了一个新的变量(和全局就没关系了)
而第二个例子中,你先调用了全局变量(此时,就不可以在创建重名变量),而你后来又创建了一个变量,所以错误

jackz007 发表于 2020-11-18 17:56:53

本帖最后由 jackz007 于 2020-11-18 18:03 编辑

def outside():
    var = 5
    def inside():
      var = 3       # 赋值意味着定义 var 为局部变量,从此,与外部同名变量无关
      print(var)    # 打印局部变量 var 的数值
    inside()

outside()

def outside():
    var = 5
    def inside():
      print(var)    # 函数内未定义先访问,这就意味着,var 被识别为一个外部(全局)变量
      var = 3       # var 事先未经过 nonlocal 或 global 声明,所以,变量只读,不可赋值。
    inside()

outside()
页: [1]
查看完整版本: 第二十讲有大佬吗?