Python模組中的變數作用域是如何工作的?


Python物件的範圍決定了它的可訪問性。為了訪問程式碼中特定的變數,必須指定其作用域,因為它無法從程式的任何地方訪問。術語“作用域”描述了變數顯示的精確編碼區域。可以限制變數的可見性,以便只有某些人才能看到它們。作用域確定哪些變數是“可見”的。

作用域確定控制如何以及在哪裡搜尋變數的規則。搜尋變數是為了賦值或檢索值。名稱空間為變數或過程提供唯一的標識。名稱空間詳細說明了物件的名稱以及Python直譯器試圖訪問該物件的位置。

根據LEGB規則檢查名稱空間的作用域解析。E代表“封閉的”,G代表“全域性的”,B代表“內建的”,L代表“區域性的”。LEGB的順序非常重要。首先搜尋區域性變數,然後是封閉變數,然後是全域性變數,最後是內建變數。

Python中有四個主要作用域:內建、全域性、封閉和區域性。

區域性作用域

在函式中定義的變數是具有區域性作用域的變數。函式體包含這些變數的定義。

示例

讓我們用一個例子來幫助你理解這個概念。示例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

更新於:2022年9月16日

1K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.