全域性變數以及如何從 Python 中的函式進行更改
-
使用
全域性變數
並從 Python 中的函式更改它們 -
在 Python 中建立
Global
變數 -
從 Python 中的函式更改
全域性
變數的值 -
Python 中的
Global
關鍵字 - 多個函式和一個全域性變數
-
具有與
全域性
變數同名的變數的函式 - まとめ
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
由於該函式已將 x
從 10
更新為 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 中建立它們。