變數的作用域是指程式碼能夠存取該變數的區域,如果超出該區域,再造訪時就會出現錯誤。在程式中,一般會根據變數的 “有效範圍” 將變數分為 “全域變數” 和 “局部變數”。
局部變數是指在函數內部定義並使用的變數,它只在函數內部有效。即函數內部的名字只在函數運行時才會創建,在函數運行之前或者運行完畢之後,所有的名字就都不存在了。所以,如果在函數外部使用函數內部定義的變量,就會出現拋出 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中變數的作用域如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!