python疑問5:位置引數,預設引數,可變引數,關鍵字引數,命名關鍵字引數區別

王鵬宇發表於2019-02-16

1.位置引數
位置引數要求呼叫時傳入函式的引數必須和定義時的位置和個數一致,即一一對應,不可預設

def func(a,b):
    sum = a + b
    return sum
print(func(2,3)) //5
print(func(2)) //報錯

2.預設引數
定義在位置引數後,作用是當引數預設時,用定義的預設值替代

def func(a,b=3):
    sum = a + b 
    return sum
print(func(2,4)) //6
print(func(2))  //5

3.可變引數
在tuple或list前加一個*,構造出可變引數。接收任意個引數,包括0個。用於函式引數不確定的情況

def func(*args):
    sum = 0
    for x in args:
        sum += x
    return sum 
    
print(func(1,2,3)) //6
//將list或tuple內全部元素作為可變引數
L = [1,2,3,4]
print(func(*L)) //10

4.關鍵字引數
在dict前加兩個*,構造關鍵字引數。接收任意無限制的引數,用於擴充套件函式的功能

def func(a,b,**kw):
    sum = a+b
    print(a,`+`,b,`=`,sum,kw)
func(2,3,color="black",phone="vivo")
// Out:2 + 3 = 5 {`color`: `black`, `phone`: `vivo`}

//先組裝dict,再作為關鍵字引數傳進去
desc = {`color`: `black`, `phone`: `vivo`}
func(2,3,**desc)
// Out:2 + 3 = 5 {`color`: `black`, `phone`: `vivo`}

5.命名關鍵字引數
命名關鍵字引數指定了key,將關鍵字引數做了一個限制。以一個作為分割。如果已經存在可變引數,那麼命名關鍵字不需要作為分割

def func(a,b,*,color):
    sum = a+b
    print(a,`+`,b,`=`,sum,`color:`,color)
func(2,3,color=`black`) // Out:2 + 3 = 5 color: black
func(2,3,color=`black`,phone=`vivo`) //報錯 func() got an unexpected keyword argument `phone`
//如果已經存在可變引數,那麼命名關鍵字不需要*作為分割
def func(a,b,*args,color=`red`):
    sum = a+b
    print(a,`+`,b,`=`,sum,args,`color:`,color)
func(2,3,color=`black`) //2 + 3 = 5 () color: black
func(2,3,4,5,color=`black`) // 2 + 3 = 5 (4, 5) color: black
//命名關鍵字支援預設值
func(2,3,4,5) //2 + 3 = 5 (4, 5) color: red

注意:
引數位置排列順序:位置引數,預設引數,可變引數,命名關鍵字引數,關鍵字引數,

相關文章