我上网搜索,但无法得到一个明确的答案。它是否意味着参数和关键字?
根据这篇使用稍微不同的命名约定(kwargs而不是kwds),它们是
- args -非关键字参数
- kwargs -关键字参数
当我们不确定将有多少参数传递给函数时,我们使用*args
或**kwargs
。
:
*args
将非关键字参数作为tuple
传递。
**kwargs
将作为dictionary
传递关键字参数。
注意,你可以使用任何变量名来代替'args'和'kwargs'。例如:*myargs, **mykwargs
# To help you better visualize here is an example:
def test_func(*args,**kwargs):
print(args)
print(kwargs)
test_func(1,2,3,4, a=1,b=2,c=3)
# Output :
(1, 2, 3, 4)
{'a': 1, 'b': 2, 'c': 3}
在python(和其他一些语言)中,您可以使用这些特殊参数。如@Michalor所述,args用于非关键字参数,kwargs(或关键字args)用于基于关键字的参数。
这里有一个很好的例子,来自https://book.pythontips.com/en/latest/args_and_kwargs.html
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
#first with *args。在main或IDLE中执行以下代码:
args = ("two", 3, 5)
test_args_kwargs(*args)
将导致以下输出
arg1: two
arg2: 3
arg3: 5
现在与**kwargs:
在main或IDLE中执行以下代码:
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test_args_kwargs(**kwargs)
将导致以下输出:
arg1: 5
arg2: two
arg3: 3
正如你所看到的,你基本上可以用*args或**kwargs来调用任何函数,这将导致解释器自动将列表/字典输入到函数中。
*args导致一个列表一个接一个地输入,并且必须是为了让解释器正确地查找和匹配列表项与参数。
**kwargs使字典由关键字输入,这些关键字可能是无序的,但所有参数(没有默认值)都需要在给定的字典中,以避免程序失败。
编辑*:没有必要将字典/列表称为args或kwargs。你也可以调用你想要的list/dict,但是你需要用单星号来调用args-handling(例如*list)或者用双星号来调用kwargs-handling(例如**dict)