可变长参数
- 参数的长度可便是指在调用函数的时候,实参的个数可以不固定
- 在调用函数的时候,实参的定义就是位置参数和关键字参数两种
- 形参可以提供两种解决方案来分别处理两种形式的可变长度的参数
(1)可变长位置参数(*args)
(1)任意类型参数
- 如果在最后一个形参名的前面加,那么在调用函数的时候,溢出的实参,都会被接收,以元组的形式保存下来赋值给该形参
"""可变长位置参数"""
# 可变长位置参数就是在形参前面加个*,可以以元组的形式保存多出来的实参。
#在形参前面加*来接收调用时溢出的实参,最后以元组的形式保存!
# def login(*args):
#
# return args
# res=login(1,2,3,4,5)
# print(res)#(1, 2, 3, 4, 5)
#如果要求多个值的和
# def add(*args):
# res=0
# for i in args:
# res+=i
# print(res)
# add(1,2,3,4,5)
#15
(2)解包
- 如果实现生成一个列表也可以直接传值给*args
"""解包"""
# 调用函数后,需要在列表前加*对列表进行解包,赋值给args
list=[11,22]
def add(*args):
print(args)
add(1,2,*list)
# def add(*args):
# print(args)
#
#
# add(1, 2, *[11, 22])
(2)可变长关键字参数(**kwargs)
- 如果在形参前面加**,那么在调用函数时,溢出的关键字参数,都会以字典的形式保存下来赋值给该形参
"""可变长关键字参数**kwargs"""
# 可变长关键字参数,定义函数的形参前加**,调用函数的时候溢出的关键字,会以字典的形式保存下来赋值给形参
# def add(**kwargs):
# print(kwargs)
#
# add(name='syh',age=18)
# #{'name': 'syh', 'age': 18}
#定义一个字典,字典前加**, 仍可以将以字典为实参传给**args
# dict={'name':'syh','age':18}
# def add(**kwargs):
# print(kwargs)
#
# add(**dict)
# # 如果形参为常规参数(位置或默认),实参仍可以是 ** 的形式
# def foo(x, y, z=3):
# print(x)
# print(y)
# print(z)
#
# foo(**{'x': 1, 'y': 2})
# 可变长位置参数和可变长关键字参数混合使用
# def register(name, age, *args, **kwargs):
# user_dict = {'name': name, 'age': age}
# if args:
# user_dict['additional_info'] = args
# if kwargs:
# user_dict.update(kwargs)
# return user_dict
#
# user_dict = register("Dream", 18, "handsome", hobby=["music"])
# print(user_dict)
def add(name,age,*args,**kwargs):
dict={'name':name,'age':age}
# 如果有位置参数进来而没有变量名接收的时候就会打包成元组,放到上面的字典中
if args:
dict['gender']=args
# 如果有关键字参数进来,就会被字典更新
if kwargs:
dict.update(kwargs)
return dict
dict=add('syh',18,'男',hobby='music')
print(dict)
标签:函数,kwargs,args,add,dict,可变,print,参数
From: https://www.cnblogs.com/suyihang/p/17894363.html