只需编写一个装饰器,从调用中删除一定数量的参数:
def ignoreargs(func, count):
@functools.wraps(func)
def newfunc(*args, **kwargs):
return func(*(args[count:]), **kwargs)
return newfunc
>>> def test(a, b):
print(a, b)
>>> test3 = ignoreargs(test, 3)
>>> test3(1, 2, 3, 4, 5)
4 5
我的基本想法是在默认情况下使其更通用,例如具有签名:remap_args(f, mapping)
其中映射是整数的可迭代,它为您提供创建函数的参数的位置。
def remap_args(func, mapping):
@functools.wraps(func)
def newfunc(*args, **kwargs):
newargs = [args[m] for m in mapping]
return func(*newargs, **kwargs)
return newfunc
>>> t = remap_args(test, [5, 2])
>>> t(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
5 2