Python學習之基礎語言篇——函數參數詳解

Python中函數的參數主要追尋兩大類參數,位置參數和關鍵字參數python

關鍵字參數纔有默認值,位置參數沒有默認值web

解析原則:函數

  1. 定義和調用函數中位置參數應該放在關鍵字參數的前面code

  2. 非任意數量位置參數能夠經過關鍵字參數傳值,任意數量位置參數不能經過關鍵字參數傳值orm

  3. 任意數量位置參數後面必須接關鍵字參數(定義函數或函數傳值)編譯器

  4. 任意數量位置參數和任意數量關鍵字參數只能在定義中定義一次。it

  5. 任意數量關鍵字參數放在全部類型參數的後面編譯

    一:非任意數量位置參數或關鍵字參數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}
相關文章
相關標籤/搜索