有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数
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调用函数执行结果分界线
需求:
代码:
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)
执行结果:和上面一样
对比:可以看出,在形参那里用的不是多值元组参数,而是一个形参只能接收一个实参;在调用函数那里输入的实参是一个元组,比之前多了一对括号。我们说过在调用个函数时输入的实参形式越简单越好,所以对比下还是多值参数更方便一点。
在调用带有多值参数的函数时,如果希望:
就可以使用拆包,简化参数的传递,拆包的方式是:
我们先来看一段代码:
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自学网
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。