全域性變數以及如何從 Python 中的函式進行更改

Shikha Chaudhary 2023年1月30日
  1. 使用全域性變數並從 Python 中的函式更改它們
  2. 在 Python 中建立 Global 變數
  3. 從 Python 中的函式更改全域性變數的值
  4. Python 中的 Global 關鍵字
  5. 多個函式和一個全域性變數
  6. 具有與全域性變數同名的變數的函式
  7. まとめ
全域性變數以及如何從 Python 中的函式進行更改

Python 中的全域性變數是那些具有全域性範圍的變數。換句話說,它們的範圍不限於原始碼的任何特定功能或塊。

使用全域性變數並從 Python 中的函式更改它們

首先,宣告變數 x

def avengers():
    x = 10
    print("Gibberish")


avengers()
print(x)

輸出:

Gibberish

NameError: name 'x' is not defined

變數 x 在函式 avengers 內。這意味著這個變數的範圍僅限於這個函式。

這就是為什麼如果我們試圖在這個函式之外訪問這個變數會得到一個錯誤。

在 Python 中建立 Global 變數

將變數 x 宣告移到函式外。

x = 10


def avengers():
    print("Gibberish")


avengers()
print(x)

輸出:

Gibberish
10

變數 x 是在函式外部定義的,因此,我們可以在程式的任何地方使用它。

此外,它是一個全域性變數。在全域性範圍內宣告一個變數會在 Python 中建立一個 global 變數。

我們還可以從 avengers 函式訪問 global 變數 x

x = 10


def avengers():
    print("From avengers:", x)


avengers()
print("Outside avengers:", x)

輸出:

From avengers: 10
Outside avengers: 10

從 Python 中的函式更改全域性變數的值

該程式碼有一個帶有 10全域性變數 x。然後,在函式 change 中,我們將 12 新增到這個變數 x

函式內的列印語句應該列印 x 的更新值。

x = 10


def change():
    x = x + 12
    print(x)


change()

輸出:

UnboundLocalError: local variable 'x' referenced before assignment

在 python 中,一個函式只能訪問和列印一個全域性變數。我們需要告訴函式引用對全域性變數的任何賦值或更改。

如果我們不指定這一點,則函式認為對區域性變數本身進行了賦值和更改。因此,我們得到這個錯誤。

使用 global 關鍵字從 Python 函式內部更改 global variable 值。

Python 中的 Global 關鍵字

Python 為你提供了一個名為 global 的關鍵字來修改其範圍之外的變數。當你必須更改變數的值或進行任何分配時使用它。

讓我們嘗試使用 global 關鍵字修復上述程式碼。

x = 10


def change():
    global x
    x = x + 12
    print(x)


change()

輸出:

22

看看我們如何在第三行使用 global 關鍵字將 x 指定為全域性。

現在,讓我們在函式外部列印變數 x 時檢視它的值。

x = 10


def change():
    global x
    x = x + 12
    print(x)


change()
print(x)

輸出:

22
22

由於該函式已將 x10 更新為 22,所以即使在本地範圍之外訪問變數時,我們也會將更新後的值作為輸出。

var = "A"


def chocolate():
    print("From chocolate:", var)


def cake():
    global var
    var = var * 2
    print("From cake:", var)


chocolate()
cake()
print("From main:", var)

輸出:

From chocolate: A
From cake: AA
From main: AA

你可以從此輸出中得出的最佳推論是 - 順序很重要。chocolate 函式使用 var 的初始值,而不是修改後的值。

這是因為修改 var 值的函式 cake 是在函式 chocolate 之後呼叫的。如果我們首先呼叫 cake 函式,chocolate 函式也將使用 var 的更新值。

var = "A"


def chocolate():
    print("From chocolate:", var)


def cake():
    global var
    var = var * 2
    print("From cake:", var)


cake()
chocolate()
print("From main:", var)

輸出:

From cake: AA
From chocolate: AA
From main: AA

這給我們帶來了一些在使用 Python 的 global 關鍵字時必須遵循的規則。

  • 預設情況下,函式內部的變數是區域性變數,函式外部的變數是全域性。不要將此關鍵字用於函式外的變數。
  • 在 Python 中的函式外部使用 global 關鍵字不會以任何方式影響程式碼。
  • global 關鍵字的主要用途是在 Python 中進行賦值或更改。因此,我們不需要它來簡單地訪問或列印變數。

多個函式和一個全域性變數

在這裡,我們有一個值為 1 的全域性變數 s。看看函式 college 如何使用 global 關鍵字來修改 s 的值。

s = 1


def college():
    global s
    s = s + 5
    print("College students: ", s)
    return s


def school():
    s = college()
    s = s + 10
    print("School students: ", s)
    return s


college()
school()
print("Global students: ", s)

輸出:

College students:  6
College students:  11
School students:  21
Global students: 11

首先,我們將函式稱為 college。該函式修改全域性變數 s 並將其更改為 6

我們從第一個 print 語句中得到輸出為 6。然後,我們將函式稱為 school

我們再次在函式 college 中呼叫函式 school。這一次,函式 college 也修改了變數 s 的值。

它採用先前的值 6,然後將其更新為 11。因此,全域性變數的最終值現在變為 11

然後,函式 school 對其進行修改,但這不會在全域性變數中更新。它使用 s 的更新值並在新增 10 後列印該值。

它不使用 global 關鍵字。因此,輸出 21。現在你可以看到為什麼最後一條語句的輸出是 11

這只不過是全域性變數 s 的更新值。

具有與全域性變數同名的變數的函式

有可能我們有一個函式,其中宣告瞭一個與 global 變數同名的變數。

這裡出現的一個不可避免的問題是 - 函式將使用哪個變數?本地還是全球?讓我們看看。

# the global variable
a = 5

# function


def music():

    # variable inside function with same name as global variable
    a = 10
    print("Music:", a)


music()
print(a)

輸出:

Music: 10
5

這段程式碼中有一個全域性變數 a,其值為 5。函式 music 也有一個名為 a 的變數。

該變數的值為 10。當我們在函式內部訪問變數 a 的值時,我們會得到該函式本地變數的值,即 10

當我們從這個函式外部訪問 a 的值時,我們得到的輸出是 5

這意味著如果 local 變數與特定範圍內的 global 變數同名,則它比全域性變數具有更高的優先順序。

まとめ

本教程教授了 Python 中全域性變數的基礎知識。我們看到了它們與區域性變數的不同之處以及我們如何在 Python 中建立它們。