Python 速查手冊

4.8 簡單陳述 global

關鍵字 (keyword) global 用來在函數 (function) 中宣告函數定義外的全域變數 (global variable) ,使該全域變數可以在函數中進行處理。

基本上,函數內只要沒有定義跟外部全域變數相同的區域變數 (local variable) 名稱,就可以直接取得外部全域變數的數值,例如變數 (variable) a 設定為 999 ,函數 function1() 沒有定義跟 a 相同的變數名稱,因此可以直接用 print() 函數印出 a 的值

a = 999

def function1():
    print(a)

function1()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:global01.py
# 功能:示範 global 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 global01.py
999
$

然而可以取得並不代表可以修改,這裡函數 function2() 直接將 a 遞增 1 ,結果在呼叫 function2() 的時候發生錯誤,因為在函數內預設可以修改的是區域變數,而非外部的全域變數

a = 999

def function2():
    a += 1
    print(a)

function2()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:global02.py
# 功能:示範 global 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 global02.py
Traceback (most recent call last):
  File "global02.py", line 7, in <module>
    function2()
  File "global02.py", line 4, in function2
    a += 1
UnboundLocalError: local variable 'a' referenced before assignment
$

此時如果要修改外部全域變數的值,就要利用關鍵字 global 宣告全域變數的名稱,例如這裡 function3() 先用 global 宣告了 a ,然後將 a 遞增 1

a = 999

def function3():
    global a
    a += 1
    print(a)

function3()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:global03.py
# 功能:示範 global 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 global03.py
1000
$

如果是巢狀函數也一樣適用,例如 function5() 是在 function4() 內定義的函數,在 function5()global 宣告全域變數 a 之後,再將 a 遞增 1 同樣有效

a = 999

def function4():
    print(a)
    
    def function5():
        print(a)
        global a
        a += 1
        print(a)
    
    function5()

function4()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:global04.py
# 功能:示範 global 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 global04.py
1000
1000
1001
$
由於 function5() 先印出變數 a 才將 a 宣告為 global ,因此這裡原本會有語法警告,此處略去語法警告直接顯示結果。

上一頁: 4.7 簡單陳述 import from as
Python 速查手冊 - 目錄
下一頁: 4.9 簡單陳述 nonlocal
回 Python 教材首頁