在python中传递命名变量参数

时间:2008-09-09 08:46:52

标签: python variadic-functions

说我有以下方法:

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?

3 个答案:

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

现在看来显而易见......