所以我有两个非常相似的函数,让我们称它们为foo
和bar
:
def foo(x,y):
return lambda a,b: (x+a, y+b)
或等效
lambda x,y: lambda a,b: (x+a, y+b)
以及
def bar(x,y,z):
return lambda a,b,c: (x+a, y+b, z+c)
或等效
lambda x,y,z: lambda a,b,c: (x+a, y+b, z+c)
我能概括一下吗?我想传递一个任意长度的参数列表,然后得到一个带有相同长度参数的lambda。
答案 0 :(得分:2)
使用*args
并概括:
lambda *outer: lambda *inner: tuple(a + b for a, b in zip(outer, inner))
或者:
lambda *outer: lambda *inner: tuple(map(sum, zip(outer, inner)))
如果列表足够,那么tuple()
可以替换为列表推导([a + b for ...]
)或在第二个版本(Python 3)中替换为list()
或者只是完全删除( Python 2)。
演示:
>>> outer = lambda *outer: lambda *inner: tuple(a + b for a, b in zip(outer, inner))
>>> inner = func(1, 2, 3)
>>> inner(2, 3, 4)
(3, 5, 7)
>>> inner = outer(1, 2, 3, 4)
>>> inner(4, 5, 6, 7)
(5, 7, 9, 11)
答案 1 :(得分:1)
您可以使用*args
表示法执行此操作:
def bar(*args1):
return lambda *args2: tuple(map(sum,zip(args1,args2)))