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

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

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

Python中有两种多值参数:

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

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

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

*args  ——存放元组参数,前面有一个*

**kwargs ——存放字典参数,前面带两个*

args是arguments的缩写,有变量的含义。

kw是keyword的缩写,kwargs可以记忆键值对参数。

提示:

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

代码演示:

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. 功能要求:将传递的所有数字累加并且返回累加结果

代码:

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)

执行结果:

 

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

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. 在字典变量前增加两个*

我们先来看一段代码:

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这个形参里了,这并不是我们的本意,我们的本意是元组传递给第一个形参,字典传递给第二个形参,这时候就要用到元组和字典的拆包来解决了。

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

# 拆包语法,简化元组变量/字典变量的传递
demo(*gl_nums, **gl_dict)

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

执行结果:

 

文章借鉴来源:Python自学网  http://www.wakey.com.cn/

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王子玉博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值