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

初識 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.pyupdate.py 和 main.py

在 config.py 模組中儲存了全域性變數 a 和 b。在 update.py 檔案中,我們匯入了 config.py 模組並改變了 a 和 b 的值。同樣,在 main.py 檔案,我們匯入了 config.py 和 update.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

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

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖