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的作用域仅限于函数中
网友评论