变量作用域

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 中没有块级作用域
    
    变量作用域_第1张图片
    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()
    

你可能感兴趣的:(变量作用域)