在python中传递命名变量参数

时间:2020-03-05 18:49:54  来源:igfitidea点击:

说我有以下方法:

def methodA(arg, **kwargs):
    pass

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

在methodA中,我希望通过传递kwarg来调用methodB。但是,似乎如果我按以下方式定义" methodA",第二个参数将作为位置而不是命名变量参数传递。

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

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

解决方案

回答

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

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

现在似乎很明显...

回答

将星号放在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")

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