關鍵字 (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():
global a
print(a)
a += 1
print(a)
function5()
function4()
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:global04.py
# 功能:示範 global 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 global04.py |
999 |
999 |
1000 |
$ |
相關教學影片