Python *args
和**kwargs
于 2020 年 1 月 7 日更新
什么是*args
?
*args
允许我们将可变数量的参数传递给函数。 让我们以一个例子来阐明这一点。
假设您创建了一个将两个数字相加的函数。
def sum(a, b):
print("sum is", a+b)
如您所见,该程序仅接受两个数字,如果您要传递两个以上的参数,这就是*args
起作用的地方。
def sum(*args):
s = 0
for i in args:
s += i
print("sum is", s)
现在,您可以像这样将任意数量的参数传递给函数,
>>> sum(1, 2, 3)
6
>>> sum(1, 2, 3, 4, 5, 7)
22
>>> sum(1, 2, 3, 4, 5, 7, 8, 9, 10)
49
>>> sum()
0
注意:
*args
的名称只是一个约定,您可以使用任何有效标识符。 例如*myargs
是完全有效的。
什么是**kwargs
?
**kwargs
允许我们传递可变数量的关键字参数,例如func_name(name='tim', team='school')
def my_func(**kwargs):
for i, j in kwargs.items():
print(i, j)
my_func(name='tim', sport='football', roll=19)
预期输出:
sport football
roll 19
name tim
在函数调用中使用*args
和**kwargs
您可以使用*args
将可迭代变量中的元素传递给函数。 以下示例将清除所有内容。
def my_three(a, b, c):
print(a, b, c)
a = [1,2,3]
my_three(*a) # here list is broken into three elements
注意:
仅当参数数量与可迭代变量中的元素数量相同时,此方法才有效。
同样,您可以使用**kwargs
来调用如下函数:
def my_three(a, b, c):
print(a, b, c)
a = {'a': "one", 'b': "two", 'c': "three" }
my_three(**a)
请注意,要使此工作有效,需要做两件事:
- 函数中的参数名称必须与字典中的键名称匹配。
- 参数的数量应与字典中的键的数量相同。