Python 預設引數

2022-08-13 04:39:13 字數 1579 閱讀 7533

python是個人最喜歡的語言,剛開始接觸python時,總覺得有很多槽點,不太喜歡。後來,不知不覺中,就用的多了、習慣了、喜歡上了。python的功能真的很強大,自己當初學習這門語言的時候,也記錄過很多的筆記,現慢慢把這些筆記發布出來,希望對大家有所幫助,對自己也算是乙個總結。

關於python預設引數,假如預設引數是可變物件是會有***的,這一點我一開始不是很理解,直到有一天,看到一篇博文說:乙個函式引數的預設值,僅僅在該函式定義的時候,被賦值一次。如此,只有當函式第一次被定義的時候,才講引數的預設值初始化到它的預設值(如乙個空的列表)。

聽到這個解釋,豁然開朗,直譯器試驗如下:

1 >>> def f(x =):

2print

(id(x))

4printx5

print

(id(x))67

8 >>>f()

9 38869952 #

可變預設引數是在原地更改!!!

10 38869952

11 >>>f()

12 38869952 #

再次呼叫時,可變預設引數還是引用最初定義的!!!

13 3886995214#

注意,預設引數是在定義時賦值,且僅僅賦值一次。15#

當函式多次被呼叫,並且沒有提供預設的引數值,就會從定義時賦值的地方取得值!16#

即使函式中給預設引數重新賦值了,下次呼叫還是會從定義賦值的地方取得值!17#

如以下的示例:當f2()多次呼叫,雖然在函式體裡面給y重新賦值了,但是下次呼叫時18#

再次列印print id(x) 的結果也還是一樣的!19#

所以:20

#1. 假如預設引數是可變物件,則會在原處直接更改物件,下次呼叫引數時,預設引數已經21#

更改過的了。如f()函式。22#

2. 假如預設引數不可變,那麼給函式中給 引數賦值時,引數會引用記憶體的其他地方。下次函式呼叫時23#

預設引數還是從定義時賦值處取得值,因此沒有***!

24 >>> def f2(y =none):

25print

(id(y))

26if

noty:

27 y =

29print

(id(y))

3031

32 >>>f2()

33 505672708 #

定義時預設引數引用這一塊記憶體。

34 38888872 #

函式體內賦值後,y引用其他地方。

35 >>>f2()

36 505672708 #

再次呼叫,y還是引用定義時賦值的記憶體處。

37 43910728 #

函式體內賦值後,y引用其他地方。

38 >>>f()

39 38869952

40 38869952

41 >>>f2()

42 505672708

43 43909408

44 >>>f2()

45 505672708

46 38868752

47 >>>

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

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

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函式在定...