(我真的无法想出一个更好的头衔!)
我有一套功能:
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)
(我正在寻找一个不错的单线解决方案)。
答案 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)
度过美好的一天!