在Python中传递命名变量参数
假设我有以下这些方法:
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)