Python-函數參數類型及排序問題

Python中函數的參數問題有點複雜,主要是由於參數類型問題致使的狀況比較多,下面來分析一下。python

參數類型:缺省參數,關鍵字參數,不定長位置參數,不定長關鍵字參數。app

      其實總共能夠分爲    位置參數和關鍵字參數,由於位置參數被放在list裏面,關鍵字參數放在dict裏面,Python在解讀的時候首先處理list,沒有遇到關鍵字就append到list裏面,遇到關鍵字了,就開始作dict直到結束,因此,位置參數必須放在關鍵字參數前面。函數

------------------------------------------------------------------------------------------------------------------------------spa

 這裏總結出三個模型:code

1:不存在缺省函數時:blog

1 def test(a,*args,c,d=3,**kwargs):
2     print(a)
3     print(args)
4     print(c)
5     print(d)
6     print(kwargs)
7 
8 test(1,2,3,4,c=1,d=4,e=11,f=22)

運行結果:class

1
(2, 3, 4)
1
4
{'e': 11, 'f': 22}

 

2:存在缺省參數,參數取默認值,(缺省參數放在*args後面)test

1 def test(a,*args,b=1,c,d=3,**kwargs):
2     print(a)
3     print(args)
4     print(b)
5     print(c)
6     print(d)
7     print(kwargs)
8 
9 test(1,2,3,4,c=1,d=4,e=11,f=22,h=66)

運行結果:總結

1
(2, 3, 4)
1
1
4
{'e': 11, 'f': 22, 'h': 66}

 

3:存在缺省參數,參數不取默認值,(缺省參數放在*args前面)dict

1 def test(a,b=1,*args,c,d=3,**kwargs):
2     print(a)
3     print(b)
4     print(args)
5     print(c)
6     print(d)
7     print(kwargs)
8 
9 test(1,2,3,4,c=1,d=4,e=11,f=22,h=66)

運行結果:

1 1
2 2
3 (3, 4)
4 1
5 4
6 {'f': 22, 'e': 11, 'h': 66}

 

總結:從上面也看出來了,其實基本順序就是  位置參數--->關鍵字參數,而後就是缺省參數在 *args先後的問題了。

  還有一點,前面已經說過,關鍵字參數被保存爲字典類型,也就是無序的,可是 **kwargs 須要放在最後!

相關文章
相關標籤/搜索