我有一个包装函数集合的类,以便稍后调用:
class Wrapper(object):
def __init__(self, *funcs):
self.funcs = funcs
def callFuncs(self, *args):
# call each function with its respective arguments
为了确保提供的args正确配对,我指定必须将参数分组为每个参数的元组。没有参数获得空元组。因此,如果我们有foo(a)
和bar(b)
以及bork()
,我们就像这样构建Wrapper
:
wrapper = Wrapper(foo, bork, bar)
然后我们会这样使用callFuncs()
:
wrapper.callFuncs((a,),(),(b,))
很简单,我可以处理。我可能会使用partial
s,所以我可以迭代每个元组并填充参数。我认为这甚至适用于变量args。但关键字args呢?
>>> def mytest(*args, **kwargs):
... print args, kwargs
...
>>> mytest((1,),(),(bar=3))
File "<stdin>", line 1
mytest((1,),(),(bar=3))
^
SyntaxError: invalid syntax
如何为这些参数指定关键字?
答案 0 :(得分:1)
mytest((1,),(),dict(bar=3))
应该可以正常工作
答案 1 :(得分:1)
这些方面的内容如何:
class Wrapper(object):
def __init__(self, *funcs):
self.funcs = funcs
def call_funcs(self, *args):
for func, args in zip(self.funcs, args):
func(*args[0], **args[1])
def foo(*args, **kwargs):
print 'foo(args={}, kwargs={})'.format(args, kwargs)
def bar(*args, **kwargs):
print 'bar(args={}, kwargs={})'.format(args, kwargs)
def baz(*args, **kwargs):
print 'baz(args={}, kwargs={})'.format(args, kwargs)
def bork(*args, **kwargs):
print 'bork(args={}, kwargs={})'.format(args, kwargs)
wrapper = Wrapper(foo, bar, baz, bork)
wrapper.call_funcs(((), {}), ((1,), {}), ((), {'spam':3}), ((42,), {'dent':17}))
print
# to make using it easier and nicer looking, optionally include this:
params = lambda *args, **kwargs: (args, kwargs)
# then the same thing can be written:
wrapper.call_funcs(params(), params(1), params(spam=3), params(42, dent=17))
输出:
foo(args=(), kwargs={})
bar(args=(1,), kwargs={})
baz(args=(), kwargs={'spam': 3})
bork(args=(42,), kwargs={'dent': 17})
foo(args=(), kwargs={})
bar(args=(1,), kwargs={})
baz(args=(), kwargs={'spam': 3})
bork(args=(42,), kwargs={'dent': 17})