歡迎光臨
每天分享高質量文章

初識 Python:全域性、區域性和非區域性變數(帶示例) | Linux 中國

在 Python 中,在函式之外或在全域性範圍內宣告的變數被稱為全域性變數。
— Programiz


致謝
編譯自 | https://www.programiz.com/python-programming/global-local-nonlocal-variables 
 作者 | Programiz
 譯者 | Liang Chen (Flowsnow) ? ? ? 共計翻譯:18 篇 貢獻時間:838 天

全域性變數

在 Python 中,在函式之外或在全域性範圍內宣告的變數被稱為全域性變數。 這意味著,全域性變數可以在函式內部或外部訪問。

我們來看一個關於如何在 Python 中建立一個全域性變數的示例。

示例 1:建立全域性變數

  1. x = "global"

  2. def foo():

  3.    print("x inside :", x)

  4. foo()

  5.    print("x outside:", x)

當我們執行程式碼時,將會輸出:

  1. x inside : global

  2. x outside: global

在上面的程式碼中,我們建立了 x 作為全域性變數,並定義了一個 foo() 來列印全域性變數 x。 最後,我們呼叫 foo() 來列印x的值。

倘若你想改變一個函式內的 x 的值該怎麼辦?

  1. x = "global"

  2. def foo():

  3.    x = x * 2

  4.    print(x)

  5. foo()

當我們執行程式碼時,將會輸出:

  1. UnboundLocalError: local variable 'x' referenced before assignment

輸出顯示一個錯誤,因為 Python 將 x 視為區域性變數,而 x 沒有在 foo() 內部定義。

為了執行正常,我們使用 global 關鍵字,檢視 PythonGlobal 關鍵字[1]以便瞭解更多。

區域性變數

在函式體內或區域性作用域內宣告的變數稱為區域性變數。

示例 2:訪問作用域外的區域性變數

  1. def foo():

  2.    y = "local"

  3. foo()

  4. print(y)

當我們執行程式碼時,將會輸出:

  1. NameError: name 'y' is not defined

輸出顯示了一個錯誤,因為我們試圖在全域性範圍內訪問區域性變數 y,而區域性變數只能在 foo()函式內部或區域性作用域內有效。

我們來看一個關於如何在 Python 中建立一個區域性變數的例子。

示例 3:建立一個區域性變數

通常,我們在函式內宣告一個變數來建立一個區域性變數。

  1. def foo():

  2.    y = "local"

  3.    print(y)

  4. foo()

當我們執行程式碼時,將會輸出:

  1. local

讓我們來看看前面的問題,其中x是一個全域性變數,我們想修改 foo() 內部的 x

全域性變數和區域性變數

在這裡,我們將展示如何在同一份程式碼中使用全域性變數和區域性變數。

示例 4:在同一份程式碼中使用全域性變數和區域性變數

  1. x = "global"

  2. def foo():

  3.    global x

  4.    y = "local"

  5.    x = x * 2

  6.    print(x)

  7.    print(y)

  8. foo()

當我們執行程式碼時,將會輸出(LCTT 譯註:原文中輸出結果的兩個 global 有空格,正確的是沒有空格):

  1. globalglobal

  2. local

在上面的程式碼中,我們將 x 宣告為全域性變數,將 y 宣告為 foo() 中的區域性變數。 然後,我們使用乘法運運算元 * 來修改全域性變數 x,並列印 x 和 y

在呼叫 foo() 之後,x 的值變成 globalglobal了(LCTT 譯註:原文同樣有空格,正確的是沒有空格),因為我們使用 x * 2 列印兩次 global。 之後,我們列印區域性變數y的值,即 local 。

示例 5:具有相同名稱的全域性變數和區域性變數

  1. x = 5

  2. def foo():

  3.    x = 10

  4.    print("local x:", x)

  5. foo()

  6. print("global x:", x)

當我們執行程式碼時,將會輸出:

  1. local x: 10

  2. global x: 5

在上面的程式碼中,我們對全域性變數和區域性變數使用了相同的名稱 x。 當我們列印相同的變數時卻得到了不同的結果,因為這兩個作用域內都宣告了變數,即 foo() 內部的區域性作用域和 foo() 外面的全域性作用域。

當我們在 foo() 內部列印變數時,它輸出 local x: 10,這被稱為變數的區域性作用域。

同樣,當我們在 foo() 外部列印變數時,它輸出 global x: 5,這被稱為變數的全域性作用域。

非區域性變數

非區域性變數用於區域性作用域未定義的巢狀函式。 這意味著,變數既不能在區域性也不能在全域性範圍內。

我們來看一個關於如何在 Python 中建立一個非區域性變數的例子。(LCTT 譯者註:原文為建立全域性變數,疑為筆誤)

我們使用 nonlocal 關鍵字來建立非區域性變數。

示例 6:建立一個非區域性變數

  1. def outer():

  2.    x = "local"

  3.    def inner():

  4.        nonlocal x

  5.        x = "nonlocal"

  6.        print("inner:", x)

  7.    inner()

  8.    print("outer:", x)

  9. outer()

當我們執行程式碼時,將會輸出:

  1. inner: nonlocal

  2. outer: nonlocal

在上面的程式碼中有一個巢狀函式 inner()。 我們使用 nonlocal 關鍵字來建立非區域性變數。inner() 函式是在另一個函式 outer() 的作用域中定義的。

註意:如果我們改變非區域性變數的值,那麼變化就會出現在區域性變數中。


via: https://www.programiz.com/python-programming/global-local-nonlocal-variables

作者:programiz[3] 譯者:Flowsnow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖