1. 程式人生 > >函式進階之名稱空間

函式進階之名稱空間

名稱空間是名稱到物件的對映。名稱空間是一個字典的實現,鍵為變數名,值是變數對應的值。各個名稱空間是獨立沒有關係的,一個名稱空間中不能有重名,但是不同的名稱空間可以重名而沒有任何影響。

x = 1
在記憶體中是{x:4304947712} x對應的是1的記憶體地址

名稱空間分三種

locals: 是函式內的名稱空間,包括區域性變數和形參。
globals: 全域性變數,函式定義所在模組的名字空間,也就是打印出這個程式的所有變數。
builtins: 內建模組的名字空間

不同變數的作用域不同就是由這個變數所在的名稱空間決定的。作用域即範圍

全域性範圍:全域性存活,全域性有效。
區域性範圍: 臨時存活,區域性有效。

檢視作用域方法 globals(),locals()

作用域的查詢順序

LEGB
L:locals
E: enclosing 相鄰的上級
G: globals
B: builtins


例子
n = 10


def func():
    n = 20
    print('func', n)

    def func2():
        n = 30
        print('func2', n)

        def func3():
            print('func3:', n)

        func3()

    func2()


func()
# func 20
# func2 30
# func3: 30