python学习笔记|nonlocal/global

python中引用变量的顺序为:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量,当试图去修改,不同作用域中的变量的值时,python会自动创建一个在那个作用域里面的同名变量,变量的作用范围仅限于此作用域。

但是仅仅是引用变量确是可以引用的。

nonlocal作用为变当前作用域局部变量为最临近外层(非全局)作用域变量

global的作用为变当前作用域局部变量为当前模块中的全局变量

举个例子

def test():
  i = 0
  def test2():
      i += 2
  test2()
  print(i)
test()

会报错local variable 'i' referenced before assignment,需要使用nonlocal改变i作用域

def test():
  i = 0
  def test2():
      nonlocal i
      i += 2
  test2()
  print(i)
test()

再如

i= 0
def test():
    def test2():
         i+= 2
    test2()
test()

会报错local variable 'i' referenced before assignment,使用global改变i作用域

i= 0
def test():
    def test2():
         global i
         i+= 2
    test2()
test()

值得注意的是,此时i值仍未0,因为test2中i的作用域仅限于函数中

你可能感兴趣的:(python学习笔记|nonlocal/global)