Python中函數的參數主要追尋兩大類參數,位置參數和關鍵字參數python
關鍵字參數纔有默認值,位置參數沒有默認值web
解析原則:函數
定義和調用函數中位置參數應該放在關鍵字參數的前面code
非任意數量位置參數能夠經過關鍵字參數傳值,任意數量位置參數不能經過關鍵字參數傳值orm
任意數量位置參數後面必須接關鍵字參數(定義函數或函數傳值)編譯器
任意數量位置參數和任意數量關鍵字參數只能在定義中定義一次。it
任意數量關鍵字參數放在全部類型參數的後面編譯
一:非任意數量位置參數或關鍵字參數class
1.純位置參數,就是多個參數間的相對位置,如:webkit
def f(arge1,arge2,arge3,arge4): print(arge1,arge2,arge3,arge4) pass f(1,'a',3,4)#將輸出1,a,3,4 f(1,2,arge3=2,arge4=4)#將輸出1,2,2,4 #必須爲4個參數,下面幾種方式都會調用失敗 f(1) f(1,'a') f(1,'a',3) f(1,arge2=2,3,4)#違背瞭解析原則1
2.純關鍵字參數,實際上就是參數的賦值,引伸爲參數設置默認值,如:
def f(arge1=1,arge2=2,arge3=3,arge4=4): print(arge1,arge2,arge3,arge4) pass f()#將輸出1,2,3,4 f(3)#將輸出3,2,3,4 f(arge3=3)#將輸出1,2,3,4 f(2,arge3=3)#將輸出2,2,3,4 #下面幾種方式都會調用失敗,違背瞭解析原則1 f(arge3=3,3)
3.位置參數與關鍵字參數混搭,位置參數通常放在關鍵字參數前面,如:
def f(arge1,arge2,arge3,arge4=3): print(arge1,arge2,arge3,arge4) pass f(1,2,3,4)#將輸出1,2,3,4 f(1,2,3)#將輸出1,2,3,3 f(1,2,arge3=2,arge4=2)#將輸出1,2,2,2 f(1,2,arge3=3)#將輸出1,2,3,3 #下面幾種方式都會調用和定義失敗,違背瞭解析規則1 f(1,arge2=2,3) f(1,arge2=2,3,arge4=3) def f(arge1,arge2,arge3=3,arge4): print(arge1,arge2,arge3,arge4) pass
二:任意數量位置參數或關鍵字參數
1.任意數量位置參數,解析器通常將其包裝爲list或tuple,在參數前面加「*」表示,如:
def f(arge1,*arge2,arge3): print(arge1,arge2,arge3) pass f(1,*(2,2),arge3=3)#將輸出1,(2,2),3 f(1,(2,2),arge3=3)#將輸出1,((2,2),),3 def ff(arge1,arge2,*arge3): print(arge1,arge2,arge3) pass ff(1,2,*(2,2))#將輸出1,2,(2,2) #下面幾種方式都會調用或定義失敗 f(1,*(2,2),3)#違背解析原則3 f(arge1=1,*(2,2),arge3=3)#違背解析原則1 f(1,arge2=(2,2),arge3=3)#違背瞭解析原則2 def f(arge1,*arge2,*arge3):#違背瞭解析原則4 print(arge1,arge2,arge3) pass
2.任意數量關鍵字參數,編譯器通常將其包裝爲dict,在參數前面加「**」表示,如:
def f(arge1,*arge2,**arge3): print(arge1,arge2,arge3) pass f(1,3,2,4,y=2,x=1)將輸出1,(3,2,4),{'x':1,'y':2} #下面幾種函數定義方式都會失敗 #違背瞭解析原則5 def f1(arge1,**arge2,*arge3): print(arge1,arge2,arge3) pass def f2(arge1,**arge2,arge3): print(arge1,arge2,arge3) pass def f3(arge1,**arge2,arge3=4): print(arge1,arge2,arge3) pass
三:混搭例子:
def f(arg1, arg2='hello', *args, **kwargs): print(arg1, arg2, args, kwargs) f(1,3,3)#將輸出1,'hello',(3,3),{} f(1,x=1)#將輸出1,'hello',(),{'x':1}