python3 局部变量、非局部变量和全局变量的区别

最近在看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中国

你可能感兴趣的:(python3 局部变量、非局部变量和全局变量的区别)