[python] 多值参数(定义多值参数的函数、案例演练、元组和字典的拆包)

2022-06-15 13:45:04 浏览数 (1)

一、定义支持多值参数的函数

有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数

Python中有两种多值参数:

参数名前增加一个*可以接收元组 参数名前增加两个*可以接收字典

一般在给多值参数命名时,习惯使用以下两个名字:

*args ——存放元组参数,前面有一个* **kwargs ——存放字典参数,前面带两个*

args是arguments的缩写,有变量的含义。 kw是keyword的缩写,kwargs可以记忆键值对参数。

提示:

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

代码演示:

代码语言:python代码运行次数:0复制
def demo(num, *nums, **person):
    print(num)
    print(nums)
    print(person)


demo(1)
demo(1, 2, 3, 4, 5, 6)
demo(1, 2, 3, 4, 5, 6, name="小花", age=20, gender="女")

执行结果:

红色是分隔线,代表每个demo调用函数执行结果分界线

二、多值参数演练 - 数字累加案例

需求:

  1. 定义一个函数叫sum_numbers,可以接收任意多个整数
  2. 功能要求:将传递的所有数字累加并且返回累加结果

代码:

代码语言:python代码运行次数:0复制
def sum_numbers(*args):
    num = 0
    print(args)
    # 循环遍历args后在累加
    for n in args:
        num  = n

    return num


result = sum_numbers(1, 2, 3, 4)
print(result)

执行结果:

有的人可能会说,为什么, 要用多值参数,我直接在调用函数的时候给的参数是元组不就可以了吗,那么我们来把这个代码写一下,看看有什么区别?

代码语言:python代码运行次数:0复制
def sum_numbers(args):
    num = 0
    print(args)
    # 循环遍历args后在累加
    for n in args:
        num  = n

    return num


result = sum_numbers((1, 2, 3, 4))
print(result)

执行结果:和上面一样

对比:可以看出,在形参那里用的不是多值元组参数,而是一个形参只能接收一个实参;在调用函数那里输入的实参是一个元组,比之前多了一对括号。我们说过在调用个函数时输入的实参形式越简单越好,所以对比下还是多值参数更方便一点。

三、多值参数 - 元组和字典的拆包

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

  1. 将一个元组变量,直接传递给args
  2. 将一个字典变量,直接传递给kwargs

就可以使用拆包,简化参数的传递,拆包的方式是:

  1. 在元组变量前增加一个*
  2. 在字典变量前增加两个*

我们先来看一段代码:

代码语言:python代码运行次数:0复制
def demo(*args, **kwargs):
    print(args)
    print(kwargs)


# 元组变量、字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "Python", "age": 20}

demo(gl_nums, gl_dict)

执行结果如下图:

从上图我们可以看到,调用函数时我们传了两个变量参数,结果显示把这两个实参都传递给前面的一个*args这个形参里了,这并不是我们的本意,我们的本意是元组传递给第一个形参,字典传递给第二个形参,这时候就要用到元组和字典的拆包来解决了。

下面使用拆包的方法:很简单

代码语言:python代码运行次数:0复制
# 拆包语法,简化元组变量/字典变量的传递
demo(*gl_nums, **gl_dict)

# 不使用拆包
# demo(1, 2, 3, name="python", age=20)

执行结果:

更多关于这方面的文章或者视频可以参考:Python自学网

0 人点赞