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)