首頁 > 軟體

Python中變數的作用域的具體使用

2023-11-03 10:00:26

前言

變數的作用域是指程式程式碼能夠存取該變數的區域,如果超出該區域,再存取時就會出現錯誤。在程式中,一般會根據變數的 “有效範圍” 將變數分為 “全域性變數” 和 “區域性變數”。

一、區域性變數

區域性變數是指在函數內部定義並使用的變數,它只在函數內部有效。即函數內部的名字只在函數執行時才會建立,在函數執行之前或者執行完畢之後,所有的名字就都不存在了。所以,如果在函數外部使用函數內部定義的變數,就會出現丟擲 NameError 異常。

例如,定義一個名稱為 function 的函數,在該函數內部定義一個變數 poem(稱為區域性變數),併為其賦值,然後輸出該變數,最後在函數體外部再次輸出 poem 變數,程式碼如下:

def function():
    poem = '面朝大海,春暖花開'
    print('區域性變數poem = ', poem)  # 輸出區域性變數的值
function()  # 呼叫函數
print('區域性變數poem = ', poem)  # 在函數體外輸出區域性變數的值

  執行上面的程式碼將顯示如下圖所示的異常。

二、全域性變數

與區域性變數對應,全域性變數為能夠作用於函數內外的變數。全域性變數主要有以下兩種情況:

(1) 如果一個變數,在函數外定義,那麼不僅在函數外可以存取到,在函數內也可以存取到。在函數體以外定義的變數是全域性變數。

例如,定義一個全域性變數 poem,然後再定義一個函數,在該函數內輸出全域性變數 poem 的值,程式碼如下:

poem = '花有重開日,人無再少年'  # 全域性變數
def function():
    print('函數體內:全域性變數poem =', poem)  # 在函數體內輸出全域性變數的值
function()  # 呼叫函數
print('函數體外:全域性變數poem =', poem)  # 在函數體外輸出全域性變數的值

執行上面的程式碼,將顯示以下內容:

函數體內:全域性變數poem = 花有重開日,人無再少年
函數體外:全域性變數poem = 花有重開日,人無再少年

說明當區域性變數與全域性變數重名時,對函數體的變數進行賦值後,不影響函數體外的變數。也就是各敲各的鑼,各打各的鼓。

例如,在函數體外定義一個全域性變數 a,並賦值為 100,在函數體內定義一個區域性變數 a,並賦值為 10,程式碼如下所示:

a = 100  # 定義一個全域性變數
def function():
    a = 10  # 定義區域性變數
    print(a)  # 輸出區域性變數的值
function()  # 呼叫函數
print(a)  # 輸出全域性變數的值

執行結果如下所示:

10100

(2) 在函數體內定義,並且使用 global 關鍵字修飾後,該變數也就變為全域性變數。在函數體外也可以存取到該變數,並且在函數體內還可以對其進行修改。

例如,在函數體內定義一個變數,使用 global 關鍵字修飾。程式碼如下所示:

poem = '天若有情天亦老,人間正道是滄桑'  # 全域性變數
print('函數體外:poem =', poem)  # 在函數體外輸出全域性變數的值
def function():
    global poem  # 將poem宣告為全域性變數
    poem = '人生得意須盡歡,莫使金樽空對月'  # 全域性變數
    print('函數體內:poem =', poem)  # 在函數體內輸出全域性變數的值
function()  # 呼叫函數
print('函數體外:poem =', poem)  # 在函數體外輸出全域性變數的值

執行上面的程式碼,將顯示以下內容:

函數體外:poem = 天若有情天亦老,人間正道是滄桑
函數體內:poem = 人生得意須盡歡,莫使金樽空對月
函數體外:poem = 人生得意須盡歡,莫使金樽空對月

從上面的結果中可以看出,通過 global 關鍵字修飾的全域性變數,是可以在函數體內部修改全域性變數的值。

說明儘管Python允許全域性變數和區域性變數重名,但是在實際開發時,不建議這麼做,因為這樣容易讓程式碼混亂,很難分清哪些是全域性變數,哪些是區域性變數。

到此這篇關於Python中變數的作用域的具體使用的文章就介紹到這了,更多相關Python 變數的作用域內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com