概念
概述:
不定长参数也叫可变参数, 即: 参数的个数是可变的.
格式:
在形参名的前边写上 *, 或者 **,
如果是 * 则表示可以接收所有的 位置参数, 形成元组.
如果是 ** 则表示可以接收所有的 关键字参数, 形成字典.
细节:
1. 如果位置参数, 一般用 *args表示.
2. 如果是关键字参数, 一般用 **kwargs kw: keyword 关键字的意思.
3. 可变参数用于形参, 表示可以接收任意个实参, 最少0个, 最多无数个.
*args参数
# 需求1: 演示可变参数之 位置参数.
# 需求: 定义函数, 求和.
# 分解版
def getSum3(a, b, c):
return a + b + c
def getSum4(a, b, c, d):
return a + b + c + d
# 我们发现, 上述的代码, 形参列表是不同的, 但是函数体是高度相似的, 我们可以用 可变参数(不定长参数)优化, 如下.
def getSum(*args): # 你把这的 args当做元组即可.
print(args, type(args)) # tuple 元组类型.
# 定义求和变量.
sum = 0
# 遍历, 获取每个数字, 然后累加.
for i in args:
sum += i
return sum # 返回求和结果
# 调用getSum()函数
print(getSum())
print(getSum(10, 20))
print(getSum(10, 20, 30))
print(getSum(33, 11, 5, 66))
# print(getSum(33, 11, 5, 66, age=33)) #报错, *args 可变参数, 能接受所有的位置参数, 形成元素, 无法接收 关键字参数.
**kwargs
# 定义函数.
def show(**kwargs): # 它只能接收 关键字参数, 形成字典.
print(type(kwargs)) # <class 'dict'>
print(kwargs)
# 调用函数.
# show(10, 20, 30) # 报错, **kwargs, 只能接收 关键字参数.
show(name='刘亦菲', age=33)
print('-' * 31)
# 演示: 函数能不能既有 *args, 又有 **kwargs呢?
def func1(*args, **kwargs):
print(args, type(args)) # (10, 20, 30) <class 'tuple'>
print(kwargs, type(kwargs)) # {'name': '高圆圆', 'age': 35} <class 'dict'>
# 调用函数
# 位置参数 关键字参数
func1(10, 20, 30, name='高圆圆', age=35)
print('-' * 31)
# 普通参数 可变参数 缺省参数
def func2(name, age, *args, address='中国'):
print(name, age, address, args)
# 位置参数 关键字参数
func2(10, 20, 30, 40, 50, address='北京')