使用 *args 和 **kwargs 代替函数的参数

using *args and **kwargs as a substitute for function's arguments

我有一个关于 *args 和 **kwargs 的问题。我知道当您不知道有多少参数将传递给函数时会使用它们。但是当我不知道那些是什么时,它可以替代一些实际需要的参数吗?

如果有函数:

def functionName(a, b):
    ...some code...
    doSomethingUsing(a)
    doSomethingUsing(b)

如果我不知道函数接受什么参数,我可以简单地使用 functionName(*args, **kwargs) - 或 functionName(*args) 吗?我注意到有些人倾向于那样使用它 - 但我不确定这是否是 * 和 ** 在 python 中的工作方式?

是的,您可以同时使用 *args 和 **kwargs,但顺序很重要,您可以有想法 here。如果你想在函数中使用所有这两个,那么顺序是

some_func(*args,**kwargs)

调用function(*args)等同于function(arg[0], arg[1],...,arg[N]).

如果您不知道该函数需要什么参数,只需调用它并查看异常:

>>> def f(a,b,c):
...     pass
...
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() missing 3 required positional arguments: 'a', 'b', and 'c'

或者您可以使用交互式 help

>>> help(f)
Help on function f in module __main__:

f(a, b, c)