Linux中國

初識 Python: global 關鍵字

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

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.pymain.py

config.py 模塊中保存了全局變數 ab。在 update.py 文件中,我們導入了 config.py 模塊並改變了 ab 的值。同樣,在 main.py 文件,我們導入了 config.pyupdate.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 譯者:MjSeven 校對:wxy

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國