初識 Python: global 關鍵字 | Linux 中國

在 Python 中,global 關鍵字允許你修改當前範圍之外的變數。它用於創建全局變數並在本地上下文中更改變數。-- Programiz

致謝編譯自 | https://www.programiz.com/python-programming/global-keyword 作者 | Programiz 譯者 | MjSeven ?? ?? ?? 共計翻譯:28篇 貢獻時間:80 天

在讀這篇文章之前,確保你對Python 全局、本地和非本地變數[1]有一定的基礎。

global 關鍵字簡介

在 Python 中,global關鍵字允許你修改當前範圍之外的變數。它用於創建全局變數並在本地上下文中更改變數。

global 關鍵字的規則

在 Python 中,有關global關鍵字基本規則如下:

?當我們在一個函數中創建一個變數時,默認情況下它是本地變數。?當我們在一個函數之外定義一個變數時,默認情況下它是全局變數。你不必使用global關鍵字。?我們使用global關鍵字在一個函數中來讀寫全局變數。?在一個函數外使用global關鍵字沒有效果。

使用 global 關鍵字(含示例)

我們來舉個例子。

示例 1:從函數內部訪問全局變數

  1. c = 1 # 全局變數

  2. def add():

  3. print(c)

  4. add()

運行程序,輸出為:

  1. 1

但是我們可能有一些場景需要從函數內部修改全局變數。

示例 2:在函數內部修改全局變數

  1. c = 1 # 全局變數

  2. def add():

  3. c = c + 2 # 將 c 增加 2

  4. print(c)

  5. add()

運行程序,輸出顯示錯誤:

  1. UnboundLocalError: local variable "c" referenced before assignment

這是因為在函數中,我們只能訪問全局變數但是不能修改它。

解決的辦法是使用global關鍵字。

示例 3:使用 global 在函數中改變全局變數

  1. c = 0 # global variable

  2. def add():

  3. global c

  4. c = c + 2 # 將 c 增加 2

  5. print("Inside add():", c)

  6. add()

  7. print("In main:", c)

運行程序,輸出為:

  1. Inside add(): 2

  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文件來存儲全局變數

  1. a = 0

  2. b = "empty"

創建update.py文件來改變全局變數

  1. import config

  2. config.a = 10

  3. config.b = "alphabet"

創建main.py文件來測試其值的變化

  1. import config

  2. import update

  3. print(config.a)

  4. print(config.b)

運行main.py,輸出為:

  1. 10

  2. alphabet

在上面,我們創建了三個文件:config.py,update.pymain.py

config.py模塊中保存了全局變數ab。在update.py文件中,我們導入了config.py模塊並改變了ab的值。同樣,在main.py文件,我們導入了config.pyupdate.py模塊。最後,我們列印並測試全局變數的值,無論它們是否被改變。

在嵌套函數中的全局變數

以下是如何在嵌套函數中使用全局變數。

示例 5:在嵌套函數中使用全局變數

  1. def foo():

  2. x = 20

  3. def bar():

  4. global x

  5. x = 25

  6. print("Before calling bar: ", x)

  7. print("Calling bar now")

  8. bar()

  9. print("After calling bar: ", x)

  10. foo()

  11. print("x in main : ", x)

輸出為:

  1. Before calling bar: 20

  2. Calling bar now

  3. After calling bar: 20

  4. 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


推薦閱讀:

中國道家養生之性命雙修全訣全法簡介(共計十六部)
那些最讓中國人自豪的汽車改名!
太極拳專題 - 中國武術 - |中國功夫|氣功|太極拳|八卦掌|形意拳|大成拳|少林|武當...
中國 履行公約的典範
怕老婆不丟人,中國歷史上那些怕老婆的著名人物都是「妻管嚴」

TAG:中國 | Python | Linux |