从python中的位置参数生成关键字参数

时间:2019-12-03 14:52:18

标签: python args kwargs

给出函数定义

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}

可以吗?

1 个答案:

答案 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