作者 | Programiz
譯者 | MjSeven ? ? ? 共計翻譯:28 篇 貢獻時間:80 天
在讀這篇文章之前,確保你對 Python 全域性、本地和非本地變數[1] 有一定的基礎。
global 關鍵字簡介
在 Python 中,global
關鍵字允許你修改當前範圍之外的變數。它用於建立全域性變數併在本地背景關係中更改變數。
global 關鍵字的規則
在 Python 中,有關 global
關鍵字基本規則如下:
global
關鍵字。global
關鍵字在一個函式中來讀寫全域性變數。global
關鍵字沒有效果。使用 global 關鍵字(含示例)
我們來舉個例子。
示例 1:從函式內部訪問全域性變數
c = 1 # 全域性變數
def add():
print(c)
add()
執行程式,輸出為:
1
但是我們可能有一些場景需要從函式內部修改全域性變數。
示例 2:在函式內部修改全域性變數
c = 1 # 全域性變數
def add():
c = c + 2 # 將 c 增加 2
print(c)
add()
執行程式,輸出顯示錯誤:
UnboundLocalError: local variable 'c' referenced before assignment
這是因為在函式中,我們只能訪問全域性變數但是不能修改它。
解決的辦法是使用 global
關鍵字。
示例 3:使用 global 在函式中改變全域性變數
c = 0 # global variable
def add():
global c
c = c + 2 # 將 c 增加 2
print("Inside add():", c)
add()
print("In main:", c)
執行程式,輸出為:
Inside add(): 2
In main: 2
在上面的程式中,我們在 add()
函式中定義了 c
將其作為全域性關鍵字。
然後,我們給變數 c
增加 2
,即 c = c + 2
。之後,我們呼叫了 add()
函式。最後,列印全域性變數 c
。
正如我們所看到的,在函式外的全域性變數也發生了變化,c = 2
。
Python 模組中的全域性變數
在 Python 中,我們建立一個單獨的模組 config.py
來儲存全域性變數併在同一個程式中的 Python 模組之間共享資訊。
以下是如何透過 Python 模組共享全域性變數。
示例 4:在Python模組中共享全域性變數
建立 config.py
檔案來儲存全域性變數
a = 0
b = "empty"
建立 update.py
檔案來改變全域性變數
import config
config.a = 10
config.b = "alphabet"
建立 main.py
檔案來測試其值的變化
import config
import update
print(config.a)
print(config.b)
執行 main.py
,輸出為:
10
alphabet
在上面,我們建立了三個檔案: config.py
, update.py
和 main.py
。
在 config.py
模組中儲存了全域性變數 a
和 b
。在 update.py
檔案中,我們匯入了 config.py
模組並改變了 a
和 b
的值。同樣,在 main.py
檔案,我們匯入了 config.py
和 update.py
模組。最後,我們列印並測試全域性變數的值,無論它們是否被改變。
在巢狀函式中的全域性變數
以下是如何在巢狀函式中使用全域性變數。
示例 5:在巢狀函式中使用全域性變數
def foo():
x = 20
def bar():
global x
x = 25
print("Before calling bar: ", x)
print("Calling bar now")
bar()
print("After calling bar: ", x)
foo()
print("x in main : ", x)
輸出為:
Before calling bar: 20
Calling bar now
After calling bar: 20
x in main : 25
在上面的程式中,我們在一個巢狀函式 bar()
中宣告了全域性變數。在 foo()
函式中, 變數 x
沒有全域性關鍵字的作用。
呼叫 bar()
之前和之後, 變數 x
取本地變數的值,即 x = 20
。在 foo()
函式之外,變數 x
會取在函式 bar()
中的值,即 x = 25
。這是因為在 bar()
中,我們對 x
使用 global
關鍵字建立了一個全域性變數(本地範圍)。
如果我們在 bar()
函式內進行了任何修改,那麼這些修改就會出現在本地範圍之外,即 foo()
。
via: https://www.programiz.com/python-programming/global-keyword
作者:programiz[3] 譯者:MjSeven 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出