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

从python中的位置参数生成关键字参数,python,args,keyword-argument,Python,Args,Keyword Argument,给定一个函数定义 def foo(model, evaluator): pass model = ... evaluator = ... 还有一个像这样的呼叫站点 foo(model=model, evaluator=evaluator) 我只想做 foo(model, evaluator) 为了避免重复,但随后在foo中构造关键字参数,以便稍后传递到**kwargs参数 我能想到的唯一办法是 def foo(*args): **{str(arg): arg for a

给定一个函数定义

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}

这样可以吗?

您不需要
model=model
位。参数是位置性的,它们根据顺序匹配,而不一定是名称匹配。在通话地点不要使用等号

>>def foo(bar,baz):
...     打印('bar',bar,'baz',baz)
... 
>>>巴=2
>>>baz=3
>>>富(巴兹酒吧)
酒吧2号和酒吧3号
有关位置参数的详细信息:

如果只想将dict传递给对象,可以使用**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
>>显示我(d)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:show_me()接受0个位置参数,但给出了1个

使用
locals()
获取局部变量字典?这对你有用吗?是的,我知道,但我需要能够以任意顺序和组合传递参数,这使得你的解决方案不可行。我试图将代码放在注释中,但无法阅读。我把代码编辑成答案。它使用REPL样式。希望有帮助。:)