對Python中函數參數類型及排序問題,三個方面的總結

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

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

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


這裏總結出三個模型:函數

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

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

運行結果:code

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

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

def test(a,*args,b=1,c,d=3,**kwargs):
    print(a)
    print(args)
    print(b)
    print(c)
    print(d)
    print(kwargs)

test(1,2,3,4,c=1,d=4,e=11,f=22,h=66)

運行結果:blog

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

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

def test(a,b=1,*args,c,d=3,**kwargs):
    print(a)
    print(b)
    print(args)
    print(c)
    print(d)
    print(kwargs)

test(1,2,3,4,c=1,d=4,e=11,f=22,h=66)

運行結果:it

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

總結:

從上面也看出來了,其實基本順序就是  位置參數--->關鍵字參數,而後就是缺省參數在 *args先後的問題了。
還有一點,前面已經說過,關鍵字參數被保存爲字典類型,也就是無序的,可是 **kwargs 須要放在最後!
轉自:http://www.javashuo.com/article/p-wyqlcegk-er.html

相關文章
相關標籤/搜索