Python--作用域

作用域

作用范围:
    全局范围(内置名称空间与全局名称空间属于该范围):全局有效
    局部范围(局部名称空间属于该范围):局部有效

  注:作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关


查看作用域

LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
locals 是函数内的名字空间,包括局部变量和形参
enclosing 外部嵌套函数的名字空间(闭包中常见)
globals 全局变量,函数定义所在模块的名字空间
builtins 内置模块的名字空间

  


global & nonlocal

x = 1
def foo():
    global x
    x = 3
    print(x)
foo()
print(x)
 
#  global关键字用于在局部修改全局的变量
 
 
x = 1
def f1():
    x =0
    print(x)        # 0
    def f2():
        x = 2
        print(x)        # 2
        def f3():
            nonlocal x
            x = 666
            print(x)        # 666
        f3()
        print(x)    # 666
    f2()
f1()
print(x)    # 1
 
#  nonlocal关键字用于修改上一层的变量,但是不会修改全局的,如果局部没有找到就会报错

  

猜你喜欢

转载自www.cnblogs.com/Mr-chenshuai/p/9954081.html