12

假设我有以下方法:

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?

4

3 回答 3

34

将星号放在 kwargs 变量之前。这使得 Python 将变量(假定为字典)作为关键字参数传递。

methodB("argvalue", **kwargs)
于 2008-09-09T08:50:34.143 回答
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")

不幸的是,这不适用于方法。

于 2008-09-15T15:28:30.033 回答
1

一些实验,我想出了这个:

def methodA(arg, **kwargs): methodB("argvalue", **kwargs)

现在似乎很明显...

于 2008-09-09T08:49:02.397 回答