可变参数args

可变参数需要添加*,用于接收任意数量的参数
这里的args代指arguments,可以写其他任意名称

  1. def sum(*args):# 形参能够接收任意个长度的数据
  2. pass
  3. # 调用可变参数的函数
  4. sum(10,20,30)
  5. sum(10,20,30,40)

可变参数的本质是 将传递的参数包装成了元组
实现多个参数的sum函数

  1. def sum(name, *args):# 形参能够接收任意个长度的数据 args为元组类型
  2. result = 0
  3. for ele in args:
  4. result += ele
  5. return result

还有其他参数时,*args要放最后

可变参数kwargs

可变参数还有一种形式 可以接收不存在的关键字参数
定义参数时需要在变量名前添加两个*,这里的kwargs代指keywords,可以写其他任意名称

  1. def func(**kwargs):# kwargs 接收不存在的关键字参数
  2. pass
  3. # 调用不存在的关键字参数函数
  4. func(name = '张三', age = 30, score = 70)

不存在的关键字参数包装成字典

  1. def func(a,**kwargs):# kwargs 接收不存在的关键字参数 kwargs为字典类型
  2. name = kwargs['name']
  3. age = kwargs['age']
  4. # 调用不存在的关键字参数函数
  5. func(name = '张三',age = 30,a=10,score=70)

传递元组/列表给可变参数args

可以传递元组、列表给可变参数args,需要在元组/列表前加上*进行解包操作

  1. def func(*args):
  2. print(args)#(10,20,30)
  3. t = (10,20,30)
  4. # 传递元组
  5. func(*t)

传递字典给可变参数kwargs

在字典的前面加上**的作用是将字典中的元素解包成一个一个的不存在的关键字参数传递给函数

  1. def func(**kwargs):
  2. print(kwargs)
  3. d = {'name':'张三', 'age':40}
  4. # 传递字典给可变参数kwargs
  5. func(**d)

组合使用

**kwargs形参可以与 *args形参组合使用(*args必须在 **kwargs前面), *args形参接收一个元组。
例如,定义如下函数:

  1. def milk_tea_shop(kind, *arguments, **keywords):
  2. print("-- 老板,给我来杯", kind, "!")
  3. print("-- 对不起,我们的 %s 已经卖完啦!" % kind)
  4. for arg in arguments:
  5. print(arg)
  6. print("-" * 40)
  7. for kw in keywords:
  8. print(kw, ":", keywords[kw])

则可使用如下方式调用:

  1. milk_tea_shop(
  2. "QQ咩咩好喝到爆的咩噗茶",
  3. "加糖", "少冰", "加奶", "加珍珠",
  4. price="10元", address="北京市朝阳区望京SOHO",
  5. phone="010-12345678"
  6. )

输出如下:

  1. -- 老板,给我来杯 QQ咩咩好喝到爆的咩噗茶
  2. -- 对不起,我们的 QQ咩咩好喝到爆的咩噗茶 已经卖完啦!
  3. 加糖
  4. 少冰
  5. 加奶
  6. 加珍珠
  7. ----------------------------------------
  8. price : 10
  9. address : 北京市朝阳区望京SOHO
  10. phone : 010-12345678