Python 模組中的變數作用域是如何工作的?
Python 物件的作用域決定了其可訪問性。為了在程式碼中訪問特定變數,必須指定其作用域,因為它無法從程式的任何地方訪問。術語“作用域”描述了變數顯示的精確編碼區域。可以限制變數的可見性,以便只有某些人才能看到它們。作用域確認哪些變數可以“被看到”。
作用域確定了控制如何以及在何處搜尋變數的規則。搜尋變數是為了賦值或檢索值。名稱空間為變數或過程提供了唯一的標識。名稱空間詳細說明了物件的名稱以及 Python 直譯器正在尋找訪問的位置。
根據 LEGB 規則檢查名稱空間的作用域解析。E 代表“封閉”,G 代表“全域性”,B 代表“內建”,L 代表“區域性”。LEGB 的順序非常重要。首先搜尋區域性變數,然後是封閉變數,然後是全域性變數,最後是內建變數。
Python 中有 4 個主要作用域,分別是內建作用域、全域性作用域、封閉作用域、區域性作用域。
區域性作用域
在函式中定義的變數是具有區域性作用域的變數。函式體包含這些變數的定義。
示例
讓我們使用一個示例來幫助您理解這個概念。示例 1 中使用了 num 一個變數。Num = 0 不是區域性變數,因為它是在函式外部定義的。根據我們的定義,區域性變數是在函式體內部宣告的變數。在這裡,區域性變數 num=1 在 demo 函式內部設定並列印。
num=0 def demo(): #print(num) num=1 print("The Number is:",num) demo()
輸出
生成的輸出如下所示。
The Number is: 1
全域性範圍
全域性作用域變數是可以從程式的任何地方讀取的變數。您可以在程式碼內部和外部訪問這些變數。當我們打算在程式的其餘部分使用變數時,我們會將其宣告為全域性變數。
示例
上面的示例展示了我們如何在函式外部宣告名為 str 的變數。當呼叫函式 demo 時,會列印變數 str 的值。在函式內部使用全域性變數不需要 global 關鍵字。
def demo(): print(Str) # Global Str = "Hello World" demo()
輸出
生成的輸出如下所示。
Hello World
封閉作用域或非區域性作用域
在巢狀函式中指定的變數稱為非區域性變數。它表示變數的作用域既不能是區域性的,也不能是全域性的。nonlocal 關鍵字用於生成非區域性變數。
示例
我們在下面的程式碼中建立了外部函式,內部函式巢狀在外部函式中()。Inner() 函式定義在 outer() 函式的作用域內。對在 inner() 函式中宣告的非區域性變數所做的更改會反映在 outer 函式的輸出中。
def Outer(): x = "local" def Inner(): nonlocal x x = "nonlocal" print("inner:", x) Inner() print("outer:", x) Outer()
輸出
輸出如下所示。
inner: nonlocal outer: nonlocal
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP