提示: 多值参数 的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于我们能够读懂大牛的代码
1、多值参数
定义支持多值参数的函数
-
有时可能需要 一个函数 能够处理的参数 个数 是不确定的,这个时候,就可以使用 多值参数
-
python
中有 两种 多值参数:- 参数名前增加 一个
*
可以接收 元组 - 参数名前增加 两个
*
可以接收 字典
- 参数名前增加 一个
-
一般在给多值参数命名时,习惯使用以下两个名字
*args
—— 存放 元组 参数,前面有一个*
**kwargs
—— 存放 字典 参数,前面有两个*
-
args
是arguments
的缩写,有变量的含义 -
kw
是keyword
的缩写,kwargs
可以记忆 键值对参数
代码示例:
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1)
结果:
1
()
{}
与上面所示代码进行对比:
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1, 2, 3, 4, 5, name="小明", age=18, weight=178)
结果:
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'weight': 178}
多值参数案例 —— 计算任意多个数字的和
def sum_numbers(*args):
num = 0
print(args)
# 循环遍历
for n in args:
num += n
return num
result = sum_numbers(1, 2, 3, 4, 5)
print(result)
结果:
(1, 2, 3, 4, 5)
15
2、元组和字典的拆包
- 在调用带有多值参数的函数时,如果希望:
- 将一个 元组变量,直接传递给
args
- 将一个 字典变量,直接传递给
kwargs
- 将一个 元组变量,直接传递给
- 就可以使用 拆包,简化参数的传递,拆包 的方式是:
- 在 元组变量前,增加 一个
*
- 在 字典变量前,增加 两个
*
- 在 元组变量前,增加 一个
代码示例:
def demo(*args, **kwargs):
print(args)
print(kwargs)
# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}
demo(gl_nums, gl_dict)
结果:
((1, 2, 3), {'name': '小明', 'age': 18})
{}
与上面的代码进行对比:
def demo(*args, **kwargs):
print(args)
print(kwargs)
# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}
# 拆包语法,简化元组变量/字典变量的传递
demo(*gl_nums, **gl_dict)
print("*"*30)
# 不使用拆包方法时,想得到结果的操作,相对来说比较复杂。
demo(1, 2, 3, name="小明", age=18)
结果:
(1, 2, 3)
{'name': '小明', 'age': 18}
******************************
(1, 2, 3)
{'name': '小明', 'age': 18}