假设我有以下方法:

def methodA(arg, **kwargs):
    pass

def methodB(arg, *args, **kwargs):
    pass

在方法A中,我希望调用方法B,传递kwargs。然而,似乎如果我定义 methodA 如下所示,第二个参数将作为位置参数而不是命名变量参数传递。

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

如何确保 methodA 中的 **kwargs 作为 **kwargs 传递给 methodB?

有帮助吗?

解决方案

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

methodB("argvalue", **kwargs)

其他提示

作为旁白:当使用函数而不是方法时,您还可以使用 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")

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

经过一些实验,我发现了这一点:

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

现在看来很明显...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top