欢迎来到Cecilia陈的博客

孤独,是人一生最好的修行。

043 函数的可变长参数

一、函数的可变长参数

  • 可变长参数:指的是在调用函数时,传入的参数个数可以不固定
  • 可变长参数其实就是用来分别接收溢出的位置实参*,关键字实参**

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)  
posted @ 2019-08-11 18:49  Cecilia陈  阅读(124)  评论(0编辑  收藏  举报