变量作用域

0. 命名空间


  • 变量作用域
    1. 变量作用范围:可操作范围
    2. Python 是静态作用域,变量的作用域源于它在代码中的位置
    3. 在不同的位置,可能有不同的命名空间
    
  • 命名空间
    1. 作用域的体现形式
    2. 不同的变量具体的操作范围
    
  • LEGB
    1. Local:函数内的命名空间 作用范围:当前整个函数体范围
    2. Enclosing function locals:外部嵌套函数的命名空间 作用范围:闭包函数
    3. Global:全局命名空间 作用范围:当前模块(文件)
    4. Builtin:內建模块命名空间 作用范围:所有模块(文件)
    5. 规则:按照 L -> E -> G -> B 顺序进行查找
    6. 注意:Python 中没有块级作用域
    
    LEGB.png

1. 变量类型


  • 局部变量
    1. 函数参数和函数内部定义的变量
    2. 作用域为函数内部
    3. 查看局部变量:locals()
    
    def get_num(num):
        a = 10
        print(locals())
    get_num(100)
    
  • 全局变量
    1. 內建变量和函数外部定义的变量
    2. 內建变量作用域为所有文件,内部全局变量作用域为 从定义的那一行 到 当前文件结尾
    3. 查看全局变量:globals()
    
    g_num = 10
    __name__ = "luck"
    def test():
        print(globals())
    test()
    
  • 注意
    1. 访问原则:从内到外
    
    2. 结构规范:(1) 定义全局变量 
                (2) 定义函数
                 (3) 后续代码
    
    3. 操作:(1) 获取,就近原则
             (2) 修改,global 修饰全局变量,nonlocal 修饰局部变量
    
    g_a = 666
    def get_num():
        global g_a
        g_a = 888
        b = 10
        def test():
            nonlocal b
            b = 100
        test()
        print(g_a)
        print(b)
    get_num()
    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容