python 預設引數 Python預設引數有坑?

2021-10-11 19:43:03 字數 1396 閱讀 7804

最近有小夥伴在面試中遇到了「關於函式預設引數的坑」的題目,少數夥伴對此問題理得不是太清楚,今天匯智妹請到匯智動力高階教師鄧老師為大家詳細講解一下,幫助不太清楚的小夥伴清晰的梳理一遍。鄧老師本次主要從以下三點來講解:

什麼是預設引數?

函式預設引數的坑是什麼?

函式預設引數為什麼會有坑?

一、什麼是預設引數

python為了簡化函式的呼叫,提供了預設引數機制,舉個例:

這樣在呼叫函式時,就可以不寫省略的引數。

在定義有預設引數的函式時,需要注意以下兩個方面:

1.必選引數必須在前面,預設引數在後;

2.設定何種引數為預設引數?一般來說,將引數值變化小的設定為預設引數。

二、函式預設引數的坑是什麼?

當預設引數使用list時就是個坑,引用乙個例子如下:

預期返回的結果應該是:

[0,1]

[0,1,2]

然而實際結果是:

三、函式預設引數為什麼會有坑?

要弄清函式預設引數為什麼會有坑,需要知道引數可變與不可變的區別。當預設引數指向可變型別物件和不可變型別物件時,會表現出不同的行為。

可變預設引數的表現同上個示例,不可變預設引數的變化情況,看以下示例:

輸出的結果是:

由此結果可以看出,第二次呼叫時預設引數b不會受第一次呼叫的影響,因為在函式裡面進行計算後,b實際是指向了另外乙個物件。而函式使用預設引數時,b指向的還是定義函式時,為b分配的記憶體位址,這個位址的值是沒有改變的。

由此可看出,在定義函式預設引數時,直譯器會為其引數分配乙個位址,且不管是第幾次呼叫,預設值的位址都不會改變,當b的預設值為列表時,b的id就已經定了,後面再用到此預設值,就會使用改變後的結果。

python預設引數

預設引數很有用,但使用不當,也會掉坑里。預設引數有個最大的坑,演示如下 先定義乙個函式,傳入乙個list,新增乙個end再返回 def add end l return l當你正常呼叫時,結果似乎不錯 add end 1,2,3 1,2,3,end add end x y z x y z end 當...

Python預設引數

def add end list return list 預設引數多次呼叫,竟然每次結果不一樣 n 0 while n 5 print n,add end n 1 列印結果 很多初學者很疑惑,預設引數是 但是函式似乎每次都 記住了 上次新增了 end 後的list。原因解釋如下 python函式在定...

Python 預設引數

定義函式的時候,還可以有預設引數。例如python自帶的int 函式,其實就有兩個引數,我們既可以傳乙個引數,又可以傳兩個引數 int 123 123 int 123 8 83int 函式的第二個引數是轉換進製,如果不傳,預設是十進位制 base 10 如果傳了,就用傳入的引數。可見,函式的預設引數...