使用关键字params调用函数

时间:2012-05-03 08:54:30

标签: python syntax

(我真的无法想出一个更好的头衔!)

我有一套功能:

def foo(bar, baz)
def spam(blah, etc, woof)

Namespace对象,其中包括函数名称和函数特定的参数,例如args=(fun=foo, baz=111, baz=222)。如何调用函数并将params传递给它?像这样,但更好:

 x = vars(args)
 fun = x['fun']
 del x['fun']
 fun(**x)

(我正在寻找一个不错的单线解决方案)。

4 个答案:

答案 0 :(得分:2)

aDict是一个功能名称在"fun"键下的字典和其他参数时,您可以尝试:

aDict.pop("fun")(**aDict)

答案 1 :(得分:1)

您想要x['fun'](**x)吗?

只要您的函数采用**kwargs参数,这将有效。如果没有,您将需要做一些事情来切割您想要的命名空间。

答案 2 :(得分:0)

我不确定你要求的是什么,但这应该给你类似的结果:

def callback(fun, *args, **kwargs):
    return fun(*args, **kwargs)

然后你就可以这样称呼它:

callback(some_func, 'a', 'b', c=10, d=123)

将依次调用:

some_func('a', 'b', c=10, d=123)

答案 3 :(得分:0)

我不会为您提供解决方案,但这里有一个提示:

>>> import inspect
>>> def g(a, b, c=3):
pass

>>> inspect.getargs(g.func_code)
Arguments(args=['a', 'b', 'c'], varargs=None, keywords=None)

所以现在你知道了参数及其顺序,你可以有效地使用Namespace对象。 注意:这可能只能在C-Python中使用!

调用函数使用此:

>>> arguments = (1, 2, 3)
>>> keywords = {}
>>> g(*arguments, **keywords)

度过美好的一天!