1. 程式人生 > 實用技巧 >名稱空間與作用域(1)

名稱空間與作用域(1)

一、 什麼是名稱空間?

#名稱空間:存放名字的地方,三種名稱空間,(之前遺留的問題x=1,1存放於記憶體中,那名字x存放在哪裡呢?名稱空間正是存放名字x與1繫結關係的地方)

二、名稱空間的載入順序

python test.py
#1、python直譯器先啟動,因而首先載入的是:內建名稱空間
#2、執行test.py檔案,然後以檔案為基礎,載入全域性名稱空間
#3、在執行檔案的過程中如果呼叫函式,則臨時產生區域性名稱空間

三、名字的查詢順序

區域性名稱空間--->全域性名稱空間--->內建名稱空間

#需要注意的是:在全域性無法檢視區域性的,在區域性可以檢視全域性的,如下示例
# max=1 def f1(): # max=2 def f2(): # max=3 print(max) f2() f1() print(max)

四、作用域

#1、作用域即範圍
        - 全域性範圍(內建名稱空間與全域性名稱空間屬於該範圍):全域性存活,全域性有效
      - 區域性範圍(區域性名稱空間屬於該範圍):臨時存活,區域性有效
#2、作用域關係是在函式定義階段就已經固定的,與函式的呼叫位置無關,如下
x=1
def f1():
    def f2():
        print(x)
    return
f2 x=100 def f3(func): x=2 func() x=10000 f3(f1()) #3、檢視作用域:globals(),locals() LEGB 代表名字查詢順序: locals -> enclosing function -> globals -> __builtins__ locals 是函式內的名字空間,包括區域性變數和形參 enclosing 外部巢狀函式的名字空間(閉包中常見) globals 全域性變數,函式定義所在模組的名字空間 builtins 內建模組的名字空間
重點