• python global vs nonlocal (2)


    上一篇中简述了这两个关键字的基本用法:

    global用于在局部作用于修改或重定义全局变量

    nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外)

    这只是很浅的理解方式

    注意python的特性,变量有mutable和immutable之分,对于mutable变量的,在内部作用域内做修改时完全可以的,不需要上面两个关键字的修饰,比如下面的程序:

    a = 12
    li = [1, 2, 3]
    def g():
        b = 11
        li[2] = 4   #li变量在内部作用域内被修改了
        def func():
            print(a)
            print(b)
        func()
        return
    if __name__ == '__main__':
        g()
        print(li)

    但是这样做,情况却又变了:

    a = 12

    li = [1, 2, 3]
    def g():
        b = 11
        li = [1, 1, 1] #这时修改的是整个list,相当于变量重定义了,所以li被认为是局部的,并不能影响全局变量
        def func():
            print(a)
            print(b)
        func()
        return
    if __name__ == '__main__':
        g()
        print(li)

    结合python的内存管理方面的知识,我们可以这样理解:只要不涉及到变量内存的重新分配(比如immutable变量赋值,mutable变量整体赋值),在内部、嵌套作用域内的所有操作都是可以的;一旦要用同一个名字指向另一块内存,就要特别说清楚这种改变是全局的还是局部的

  • 相关阅读:
    安装Python及pip
    关于软件测试培训
    终于也为自己开了技术博客
    全球地址联动js包2021最新
    约瑟夫斯问题
    添加二级域名
    mysql导出数据
    mysql导入数据
    shopify
    MySQL数据库简介及常用命令
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4605506.html
Copyright © 2020-2023  润新知