043 函數的可變長參數

1、函數的可變長參數

  • 可變長參數:指的是在調用函數時,傳入的參數個數能夠不固定
  • 可變長參數其實就是用來分別接收溢出的位置實參*,關鍵字實參**

1.可變長形參之*

  • 形參中的*會將溢出的位置實參所有接收,以元組的形式,而後把元組賦值給*後的參數。
  • *後的參數名約定俗成爲args。
def fun(name,age,*args):# args 是用來接收多出來的對應的位置實參的,並用元組的形式存儲的
    print(name,age)# xichen 20
    print(args)# (170, 100)

fun('xichen',18,170,100)

2.可變長形參之**

  • 形參中的*會將溢出的位置實參所有接收,以字典的形式存儲,而後把字典賦值給**後的參數。
  • **後的參數名約定俗成爲kwargs
def fun(name,age,**kwargs):
    print(name,age)# xichen 20
    print(kwargs)# {'height':170,'weight':100}
    
fun('xichen',20,height=170,weight=100)

3.可變長實參之*

  • 實參中的*,*會將*後參數的值循環取出,打散成位置實參。
  • 但凡碰到實參中帶*的,它就是位置實參,應該立刻打散成位置實參去看。
def fun(name,age,hight,wight):
    print(name,age)# xichen 20
    print(args)#(170,100)
    
args = (170,100)
fun('xichen',20,*args)

4.可變長實參之**

  • 實參中的**,**會將**後參數的值循環取出,打散成位置實參。
  • 但凡碰到實參中帶**的,它就是位置實參,應該立刻打散成位置實參去看。
def fun(name,age,height,weight):# 位置形參接收關鍵字實參的變量名必須和kwargs字典裏的key同樣
    print(name,age)# xichen 18
    print(kwargs)# {'height': 170, 'weight': 100}

kwargs = {'height':170,'weight':100}
fun('xichen',20,**kwargs)

5.可變長參數應用

def index(name, age, sex):
    print(f"name: {name}, age: {age}, sex: {sex}")

def wrapper(*args, **kwargs):
    print(f"args: {args}")# args: ()
    print(f"kwargs: {kwargs}")# kwargs: {'name': 'nick', 'sex': 'male', 'age': 19}
    index(*args, **kwargs)# name: nick, age: 19, sex: male

wrapper(name='nick', sex='male', age=19)

6.命名關鍵字形參

def register(x, y, **kwargs):
    if 'name' not in kwargs or 'age' not in kwargs:
        print('用戶名和年齡必須使用關鍵字的形式傳值')
        return
    print(kwargs['name'])
    print(kwargs['age'])


register(1, 2, name='nick', age=19)
  • 在函數定義階段,*後面的參數都是命名關鍵字參數。
  • 在傳值時,必須按照key=value的方式傳值,而且key必須命名關鍵字參數的指定的參數名。
def register(x, y, *, name, gender='male', age):
    print(x)
    print(age)


register(1, 2, x='nick', age=19)
相關文章
相關標籤/搜索