Python-多值参数

187 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 多值参数

定义支持多值参数的函数:

  • 有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数
  • Python中有两种多值参数
  1. 参数的名前增加一个*可以接收元组
  2. 参数名前增加两个*可以接收字典 一般在给多值参数命名时,习惯使用以下两个名字:
  3. *args -- 存放元组参数,前面有一个*,args是arguments的缩写,是变量的含义
  4. **kwargs -- 存放字典参数,前面有两个*,kw是keyword的缩写,kwargs可以记忆键值对参数

多值参数的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于读懂厉害的代码。

def demo(num, *nums, **person):
    print(num)
    print(nums)
    print(person)


# demo(1)
demo(1, 2, 3, 4, 5, name="小明", age=18)

2. 实例详解

项目需求:计算任意多个数字的和

详细要求:

  1. 定义一个函数sum_numbers,可以接收的任意多个整数
  2. 功能:将传递的所有数字累加并且返回累加的结果
# 使用*接收多值参数
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)

程序运行结果如下图所示:本案例使用了*接收多值参数,因此在调用时,函数参数之间只需使用,进行分隔就好。

image.png

3. 元组和字典的拆包

在调用带有多值参数的函数时,如果希望:

  • 将一个元组变量,直接传递给args
  • 将一个字典变量,直接传递给kwargs 就可以使用拆包,简化参数的传递,拆包的方式是:
  • 在元组变量前,增加一个*
  • 在字典变量前,增加两个*

4. 示例详解

def demo(*args, **kwargs):
    print(args)
    print(kwargs)


# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}

# 这样args就能接收元组,kwargs就能接收到完整的字典
# 方法1:拆包语法
# 可以简化元组变量和字典变量的传递
demo(*gl_nums, **gl_dict)
print("-"*50)
# 方法2:直接导入
demo(1, 2, 3, name="小明", age=18)

运行结果如下图所示:代码演示中给出的两种方式都能够接收完整的字典和元组。

但是拆包方式更加方便,可以简化元组变量和字典变量的传递。

image.png