使用 *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)
我有一个关于 *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)