[Python] Scope (LEGB)




Python 讀取變數的順序,會依照 LEGB 的規則。

LEGB 表示 Local, Enclosing, Global, Built-in。

另外需要注意的是 Python 並不是 block scope,scope 是由變數在的 function, class, module 等等定義出來的。

舉例說明:

Local:
當 local 的 scope 裡面有定義自己想要的變數,則變數值會先被取用。

Enclosing:
如果 local 的 scope 裡面沒有定義自己需要的變數,則會按照 LEGB 的順序一層一層的去尋找。

Global:

當變數不在 local, enclosing, 跟 global 時,python 會找找看它是不是 builtin 的變數。

Python 不是 Block scope。底下的例子裡面,雖然 x 是在 try block 裡面被指定值,但是離開 try block 之後,在函數的 scope 裡面,還是讀的到 x 的值的。

另外需要注意的,Python 會先偵測同一個 scope 裡面是否已有變數定義。
所以底下會產生錯誤,而不是印出 20。

參考資料:




Be the first to comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.