close

將 LEGB 規則用於 Python 範圍 Python 使用所謂的 LEGB 規則解析名稱,該規則以名稱的 Python 範圍命名。 LEGB 中的字母代表本地、封閉、全局和內置。以下是對這些術語含義的快速概述: 局部(或函數)作用域是任何 Python 函數或 lambda 表達式的代碼塊或主體。此 Python 作用域包含您在函數內定義的名稱。這些名稱僅在函數代碼中可見。它是在函數調用時創建的,而不是在函數定義時創建的,因此您將擁有與函數調用一樣多的不同局部作用域。即使多次或遞歸調用同一個函數也是如此。每次調用都會創建一個新的本地作用域。 封閉(或非局部)作用域是一個特殊的作用域,它只存在於嵌套函數中。如果局部作用域是內部或嵌套函數,則封閉作用域是外部或封閉函數的作用域。此範圍包含您在封閉函數中定義的名稱。封閉作用域中的名稱從內部和封閉函數的代碼中可見。 全局(或模塊)作用域是 Python 程序、腳本或模塊中最頂層的作用域。此 Python 範圍包含您在程序或模塊的頂層定義的所有名稱。此 Python 範圍內的名稱在代碼中的任何地方都可見。 內置作用域是一個特殊的 Python 作用域,它在您運行腳本或打開交互式會話時創建或加載。此範圍包含諸如關鍵字、函數、異常和其他 Python 內置屬性等名稱。此 Python 範圍內的名稱也可從代碼中的任何位置獲得。當您運行程序或腳本時,它會由 Python 自動加載。

 

LEGB 規則是一種名稱查找過程,它決定了 Python 查找名稱的順序。例如,如果您引用一個給定的名稱,那麼 Python 將在本地、封閉、全局和內置作用域中按順序查找該名稱。如果名稱存在,那麼您將得到它的第一次出現。否則,你會得到一個錯誤。 注意:請注意,僅當您在函數(本地範圍)或嵌套或內部函數(本地和封閉範圍)內使用名稱時,才會搜索本地和封閉 Python 範圍。 總之,當你使用嵌套函數時,名稱是通過首先檢查局部作用域或最內部函數的局部作用域來解析的。然後,Python 從最內層作用域到最外層作用域查看外部函數的所有封閉作用域。如果未找到匹配項,則 Python 會查看全局範圍和內置範圍。如果它找不到名稱,那麼您將收到錯誤消息。 在執行期間的任何給定時間,您最多將有四個活動的 Python 作用域——本地、封閉、全局和內置——取決於您在代碼中的位置。另一方面,您將始終至少有兩個活動作用域,即全局作用域和內置作用域。這兩個範圍將始終可供您使用。

 

函數:局部作用域 局部作用域或函數作用域是在函數調用時創建的 Python 作用域。 每次調用函數時,都會創建一個新的本地作用域。 另一方面,您可以將每個 def 語句和 lambda 表達式視為新局部作用域的藍圖。 每當您調用手頭的函數時,這些局部作用域就會出現。 默認情況下,您在函數內部分配的參數和名稱僅存在於與函數調用關聯的函數或局部範圍內。 當函數返回時,局部作用域被破壞並且名稱被遺忘。 這是如何工作的:

arrow
arrow
    全站熱搜

    excelsior2014 發表在 痞客邦 留言(0) 人氣()