在Python中,global關鍵字可以用來在函數內部聲明一個全局變數。當在函數內部使用global關鍵字聲明一個變數時,Python編譯器會認為該變數是全局變數,從而可以在該函數之外的任何地方對該變數進行訪問和修改。
一、在函數內部定義全局變數
global_var = 10
def set_global_var():
global global_var
global_var = 15
set_global_var()
print(global_var) # 輸出 15
在上述代碼中,我們首先在函數外定義了一個全局變數global_var,並將其初始化為10。接著我們在函數內部使用global關鍵字聲明global_var為全局變數,並將其賦值為15。最終我們在函數外部訪問該變數,輸出結果為15。
需要注意的是,在普通的函數調用時,函數內部中對全局變數的修改並不會影響到函數外部對該變數的訪問。而在以上例子中,我們使用了global關鍵字來聲明該變數為全局變數,從而修改了全局變數的值。
二、避免使用全局變數
儘管在某些特定情況下使用全局變數是可以解決問題的,但是這樣做並不是一個良好的編程習慣。使用全局變數使得代碼很難維護,也很難重用。因此,我們應該盡量避免在Python中使用全局變數。
下面的例子演示了一個計算每秒鐘調用次數的Python程序:
counter = 0
def count_calls():
global counter
counter += 1
print("函數已經被調用了 {} 次".format(counter))
while True:
count_calls()
在該程序中,我們首先定義了一個全局變數counter,並將其初始化為0。接著我們定義一個函數count_calls(),用來增加counter的值,並列印出函數已經被調用的次數。
然而,當我們運行該程序時,會發現程序進入了死循環:
函數已經被調用了 1 次
函數已經被調用了 2 次
函數已經被調用了 3 次
函數已經被調用了 4 次
函數已經被調用了 5 次
...
這是因為我們在while循環中不斷的調用count_calls()函數,而該函數中又使用了全局變數counter,從而導致了無限循環。
為了避免這種情況的出現,我們可以將count_calls()函數修改如下:
def count_calls(counter):
counter += 1
print("函數已經被調用了 {} 次".format(counter))
return counter
counter = 0
while True:
counter = count_calls(counter)
在該例子中,我們將原本的全局變數counter作為函數參數,每次調用count_calls()函數時,都傳入該變數的當前值,並在函數內部對其進行修改,並將修改後的值作為返回值。這樣做可以保持函數的獨立性,避免了全局變數的污染。
三、在模塊中使用全局變數
除了在函數內部使用global關鍵字來聲明全局變數外,我們還可以在模塊中直接定義全局變數。
下面的例子演示了如何在模塊中定義一個全局變數,並在另一個文件中訪問這個變數:
在module1.py文件中:
global_var = 10
在module2.py文件中:
import module1
print(module1.global_var) # 輸出 10
module1.global_var = 15
print(module1.global_var) # 輸出 15
在模塊中定義全局變數與在函數內部使用global關鍵字來聲明全局變數的不同之處在於,模塊中的全局變數是可以被其他文件引用和修改的,因此需要小心謹慎地使用。
四、結語
在Python中,global關鍵字可以用來在函數內部聲明一個全局變數。雖然全局變數可以在某些特定情況下解決問題,但是使用全局變數往往是不太推薦的良好編程習慣。我們可以通過將變數作為函數參數或在模塊中定義全局變數的方式來避免使用全局變數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245111.html