我想要一个用户指定的函数,将函数参数返回给另一个函数。
def wrapper(func, arg_func, iters=10):
for i in range(iters):
args, kwargs = arg_func()
f(*args, **kwargs)
这可能吗?目前,如果我从arg_func
返回一个没有任何kwargs
的元组,那么它会抱怨有太多的参数无法解包。
wrapper(func=print, arg_func=lambda: (random.uniform(0.0, 1.0),))
ValueError: not enough values to unpack (expected 2, got 1)
arg_func
需要返回一个由两个元素组成的序列,其中第一个是序列本身,第二个是字典。
以下是调用wrapper()
的一种方法。注意,返回值的第一个元素是元组(random.uniform(0.0, 1.0),)
,第二个元素是字典{'flush':True}
。这些值只是示例。使用任何适合您的代码的序列和字典。
wrapper(func=print,
arg_func=lambda: ((random.uniform(0.0, 1.0),), {'flush':True}))
这里是另一个例子。arg_func
返回两个位置参数,不返回关键字参数:
wrapper(func=print, arg_func=lambda: (("Hello","World"), {}))
您可以做一些额外的处理。类似的东西
args, *more_args = arg_func()
kwargs = more_args[0] if more_args else {}
(此外,如果你不使用3.x,你需要做一些类似的事情
x = arg_func()
a,k = (x[0] if len(x) else []), (x[1] if len(x) > 1 else {})