通常情況下,定義函數時都會選擇有參數的函數形式,函數參數的作用是傳遞數據給函數,令其對接收的數據做具體的操作處理。
在使用函數時,經常會用到形式參數(簡稱“形參”)和實際參數(簡稱“實參”),二者都叫參數,之間的區別是:
- 形式參數:在定義函數時,函數名后面括號中的參數就是形式參數,例如:
#定義函數時,這里的函數參數 obj 就是形式參數 def demo(obj) print(obj)
- 實際參數:在調用函數時,函數名后面括號中的參數稱為實際參數,也就是函數的調用者給函數的參數。例如:
a = "C語言中文網" #調用已經定義好的 demo 函數,此時傳入的函數參數 a 就是實際參數 demo(a)
實參和形參的區別,就如同劇本選主角,劇本中的角色相當於形參,而演角色的演員就相當於實參。
明白了什么是形參和實參后,再來想一個問題,那就是實參是如何傳遞給形參的呢?
Python 中,根據實際參數的類型不同,函數參數的傳遞方式可分為 2 種,分別為值傳遞和引用(地址)傳遞:
- 值傳遞:適用於實參類型為不可變類型(字符串、數字、元組);
- 引用(地址)傳遞:適用於實參類型為可變類型(列表,字典);
值傳遞和引用傳遞的區別是,函數參數進行值傳遞后,若形參的值發生改變,不會影響實參的值;而函數參數繼續引用傳遞后,改變形參的值,實參的值也會一同改變。
例如,定義一個名為 demo 的函數,分別為傳入一個字符串類型的變量(代表值傳遞)和列表類型的變量(代表引用傳遞):
def demo(obj) : obj += obj print("形參值為:",obj) print("-------值傳遞-----") a = "C語言中文網" print("a的值為:",a) demo(a) print("實參值為:",a) print("-----引用傳遞-----") a = [1,2,3] print("a的值為:",a) demo(a) print("實參值為:",a)
運行結果為:
-------值傳遞-----
a的值為: C語言中文網
形參值為: C語言中文網C語言中文網
實參值為: C語言中文網
-----引用傳遞-----
a的值為: [1, 2, 3]
形參值為: [1, 2, 3, 1, 2, 3]
實參值為: [1, 2, 3, 1, 2, 3]
分析運行結果不難看出,在執行值傳遞時,改變形式參數的值,實際參數並不會發生改變;而在進行引用傳遞時,改變形式參數的值,實際參數也會發生同樣的改變。
對於初學者來說,本節只需要了解形參和實參,值傳遞和引用傳遞的區別即可。對於函數參數的傳遞方法,如果讀者想深入探究其原因,可閱讀《Python函數參數傳遞機制》一節。