最近在看python中nonlocal和global的使用,参考网上的大作,写了点自己的心得。有不完善的地方,还请不吝赐教。
- 局部变量作用在函数范围内,如果超出函数的作用范围,则对局部变量所作的操作,都将‘’失效“。
- 全局变量在函数内访问,但是要修改的话,需要加global关键字,这样对全局变量的操作不会因为超出函数范而”失效“。
- nonlocal关键字可将局部变量转为非局部变量,这样就可以在嵌套的函数内访问和修改。
spam='hello' #这是一个全局变量
def test():
def do_local():
spam='do_local'#创建一个局部变量
def do_nonlocal():
#变量用在嵌套作用域上
nonlocal spam
spam='do_nolocal'
def do_global():
#可以访问和修改全局变量,如果没有则创建一个全局变量
global spam
spam='do_global'
spam='hello world'
print('before do anything :',spam)
do_local()
print('after do_local: ',spam)
do_nonlocal()
print('after do_nonlocal: ',spam)
do_global()
print('after do_global: ',spam)
test()
print('全局变量',spam)
print(dir())#查看定义的全局变量
程序运行结果:
before do anything : hello world
after do_local: hello world
after do_nonlocal: do_nolocal
after do_global: do_nolocal
全局变量 do_global
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'spam', 'test']
- 总结一下
global关键字申明的变量必须在全局作用域上,而如果在嵌套作用域中,则需要使用nonlocal关键字申明变量。 - 使用global可以访问和修改全局变量,如果没有全局变量,则创建一个新的全局变量。
- 这里需要注意python的变量作用域,请移步
- 参考文章:python官方文档,Linux中国