2008-09-09 28 views
11

薪火命名变量参数说我有以下方法:在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?

回答

33

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

methodB("argvalue", **kwargs) 
+0

我不知道有多少次我不得不查看这个东西 - 它是如此简单,但呢。感谢您的支持,即使它很明显:) – cybertoast 2011-06-15 22:22:44

1

一些实验,我想通这一个:

DEF了methodA(阿根廷,** kwargs): 的methodB( “argvalue”,** kwargs)

似乎现在很明显......

2

顺便说一句:如果使用的替代方法的功能,您还可以使用functools.partial:

import functools 

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

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

最后一行将定义一个函数“条”,调用它时,会调用foo且设置为“argvalue”的第一个参数和所有其它功能只是传递:

bar(5, myarg="value") 

将调用

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

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

+0

这实际上是做什么的?与这个问题有什么关系? – rjmunro 2008-09-15 15:58:41