说我有以下方法:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
在methodA中我希望调用methodB,传递kwargs。但是,如果我按如下方式定义methodA
,则第二个参数将作为位置而不是命名变量参数传递。
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
如何确保methodA中的** kwargs作为** kwargs传递给methodB?
答案 0 :(得分:33)
将星号放在kwargs变量之前。这使得Python将变量(假定为字典)作为关键字参数传递。
methodB("argvalue", **kwargs)
答案 1 :(得分:2)
顺便说一句:当使用函数而不是方法时,您也可以使用functools.partial:
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
最后一行将定义一个函数“bar”,当调用它时,将调用foo,第一个参数设置为“argvalue”,所有其他函数都被传递:
bar(5, myarg="value")
将致电
foo("argvalue", 5, myarg="value")
不幸的是,这不适用于方法。
答案 2 :(得分:1)
一些实验,我想出了这个:
def methodA(arg,** kwargs): methodB(“argvalue”,** kwargs)
现在看来显而易见......