给出函数定义
def foo(model, evaluator):
pass
model = ...
evaluator = ...
和这样的呼叫站点
foo(model=model, evaluator=evaluator)
我只想做
foo(model, evaluator)
为避免重复,但随后在foo中构造了关键字参数,以便稍后传递给** kwargs参数。
我唯一能想到的是
def foo(*args):
**{str(arg): arg for arg in args}
可以吗?
答案 0 :(得分:2)
您不需要model=model
位。参数是位置性的,它们根据其顺序(不一定是它们的名称)匹配。在呼叫站点放弃平等。
>>> def foo(bar, baz):
... print('bar',bar,'baz',baz)
...
>>> bar=2
>>> baz=3
>>> foo(bar,baz)
bar 2 baz 3
有关位置参数的更多信息:Positional argument v.s. keyword argument
如果只想将字典传递给对象,则可以使用** arg语法:
>>> def show_me(**m):
... for k,v in m.items():
... print(k,v)
>>> d={'x':2,'y':3}
>>> show_me(**d)
x 2
y 3
您可以用双星号** d来调用它:
>>> show_me(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: show_me() takes 0 positional arguments but 1 was given