0

编辑:我很抱歉标题不好。不知道如何轻松地描述这一点。

所以我有两个非常相似的函数,我们称它们为fooand 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。

4

2 回答 2

3

使用*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 ...]) 替换或list()在第二个版本中替换为 (Python 3) 或完全删除 (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)
于 2013-08-09T17:49:12.353 回答
1

您可以使用*args符号来执行此操作:

def bar(*args1):
  return lambda *args2: tuple(map(sum,zip(args1,args2)))
于 2013-08-09T17:51:48.163 回答