在Python中传递命名变量参数

13

假设我有以下方法:

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

34
将星号放在kwargs变量前面。这将使Python将该变量(假定为字典)作为关键字参数传递。
methodB("argvalue", **kwargs)

我不知道有多少次我不得不查找这个东西 - 它非常简单,但是我还是不清楚。感谢您发布它,即使它很明显 :) - cybertoast

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")

不幸的是,这种方法无法使用。


那实际上是做什么的?它与问题有什么关系? - rjmunro

1

经过一些尝试,我弄清楚这个了:

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

现在看来很明显了...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接