赞
踩
在某些情况下我们不能在定义函数的时候就确定参数的数量和内容,这时候就可以使用可变参数。可变参数和前面介绍的例子有些许不同,可变参数声明时不会命名。
基本语法如下:
some_func(*args, **kwargs)
参数说明:
让我们先看一下“*args”会输出什么。
def foo(*args):
print(args)
foo()
foo(1, 2)
foo("小逢", "xianning", 19)
执行结果如下:
()
(1, 2)
('小逢', 'xianning', 19)
从例子中可以看到,“*args”参数获取得到的是一个元组,这也正是它能作为可变参数的原因。
让我们再看一下“**kwargs”会输出什么:
def foo(**kwargs):
print(kwargs)
foo()
foo(name="小逢")
执行结果如下:
{}
{'name': '小逢'}
从例子中可以看到,“**kwargs”参数获取得到的是一个字典,所以我们在调用函数时也必须要使用关键字参数的方法来传递参数。
在日常使用中,“*args”和“**kwargs”经常出现,用于解决一些未知的情况。
def calculate_sum(*args, **kwargs):
s = 0
for i in args:
s += i
print("输入的数字之和是", s)
for k, v in kwargs.items():
print(k, v)
calculate_sum(1,2,3,4,5, 姓名="小逢")
执行结果如下:
输入的数字之和是 15
姓名 小逢
正如上面的示例,我们在不知道有多少数字需要求和的情况下巧妙使用了可变参数来获取参数中所有数字的和。
不只在函数定义时可以使用“*”与“**”来声明参数,在函数调用时我们也可以使用相同的方式来传递未知的参数。
def exp(*args, **kwargs):
print(args)
print(kwargs)
l = [1,2,3,4]
d = {
"参数1": "arg1",
"参数2": "arg2"
}
exp(*l, **d)
执行结果如下:
(1, 2, 3, 4)
{'参数1': 'arg1', '参数2': 'arg2'}
由此可以看到,无论是参数调用还是函数定义的参数都能以some_func(*args, **kwargs)的形式调用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。