美文网首页
python3 局部变量、非局部变量和全局变量的区别

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

作者: 诸葛小愚 | 来源:发表于2018-08-11 15:39 被阅读0次

    最近在看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 局部变量、非局部变量和全局变量的区别

          本文链接:https://www.haomeiwen.com/subject/cpddbftx.html