1. 程式人生 > >Python--作用域

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關鍵字用於修改上一層的變數,但是不會修改全域性的,如果區域性沒有找到就會報錯