如何在python中为lambda表达式提供两个任意数量的参数?

时间:2013-08-09 17:47:42

标签: python lambda

编辑:我很抱歉这个糟糕的头衔。不知道如何轻松描述这一点。

所以我有两个非常相似的函数,让我们称它们为foobar

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。

2 个答案:

答案 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)))