在Python中传递命名变量参数

13 投票
3 回答
10663 浏览
提问于 2025-04-11 09:19

假设我有以下这些方法:

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 个回答

1

经过一些实验,我搞明白了这一点:

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

现在看起来很明显了……

2

顺便提一下:当你使用函数而不是方法时,你还可以使用functools.partial这个工具:

import functools

def foo(arg, **kwargs):
    ...

bar = functools.partial(foo, "argvalue")

最后一行会定义一个叫“bar”的函数,当你调用它时,它会把第一个参数设置为“argvalue”,然后把其他参数直接传给foo:

bar(5, myarg="value")

这将会调用

foo("argvalue", 5, myarg="value")

不过,这种方法在使用方法时就不行了。

34

在kwargs变量前面加上星号。这会让Python把这个变量(假设它是一个字典)当作关键字参数传递。

methodB("argvalue", **kwargs)

撰写回答