可变参数args
可变参数需要添加*
,用于接收任意数量的参数
这里的args
代指arguments
,可以写其他任意名称
def sum(*args):# 形参能够接收任意个长度的数据
pass
# 调用可变参数的函数
sum(10,20,30)
sum(10,20,30,40)
可变参数的本质是 将传递的参数包装成了元组
实现多个参数的sum
函数
def sum(name, *args):# 形参能够接收任意个长度的数据 args为元组类型
result = 0
for ele in args:
result += ele
return result
可变参数kwargs
可变参数还有一种形式 可以接收不存在的关键字参数
定义参数时需要在变量名前添加两个*
,这里的kwargs
代指keywords
,可以写其他任意名称
def func(**kwargs):# kwargs 接收不存在的关键字参数
pass
# 调用不存在的关键字参数函数
func(name = '张三', age = 30, score = 70)
不存在的关键字参数包装成字典
def func(a,**kwargs):# kwargs 接收不存在的关键字参数 kwargs为字典类型
name = kwargs['name']
age = kwargs['age']
# 调用不存在的关键字参数函数
func(name = '张三',age = 30,a=10,score=70)
传递元组/列表给可变参数args
可以传递元组、列表给可变参数args
,需要在元组/列表前加上*
进行解包操作
def func(*args):
print(args)#(10,20,30)
t = (10,20,30)
# 传递元组
func(*t)
传递字典给可变参数kwargs
在字典的前面加上**的作用是将字典中的元素解包成一个一个的不存在的关键字参数传递给函数
def func(**kwargs):
print(kwargs)
d = {'name':'张三', 'age':40}
# 传递字典给可变参数kwargs
func(**d)
组合使用
**kwargs
形参可以与 *args
形参组合使用(*args
必须在 **kwargs
前面), *args
形参接收一个元组。
例如,定义如下函数:
def milk_tea_shop(kind, *arguments, **keywords):
print("-- 老板,给我来杯", kind, "!")
print("-- 对不起,我们的 %s 已经卖完啦!" % kind)
for arg in arguments:
print(arg)
print("-" * 40)
for kw in keywords:
print(kw, ":", keywords[kw])
则可使用如下方式调用:
milk_tea_shop(
"QQ咩咩好喝到爆的咩噗茶",
"加糖", "少冰", "加奶", "加珍珠",
price="10元", address="北京市朝阳区望京SOHO",
phone="010-12345678"
)
输出如下:
-- 老板,给我来杯 QQ咩咩好喝到爆的咩噗茶 !
-- 对不起,我们的 QQ咩咩好喝到爆的咩噗茶 已经卖完啦!
加糖
少冰
加奶
加珍珠
----------------------------------------
price : 10元
address : 北京市朝阳区望京SOHO
phone : 010-12345678