0

編集: タイトルが悪くてすみません。これを簡単に説明する方法がわかりません。

だから私は信じられないほど似ている2つの関数を持っています.それらを呼び出しましょう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)

これを一般化できますか?任意の長さの引数のリストを渡し、同じ長さの引数を取るラムダを取得したいと考えています。

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()、2 番目のバージョン (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 に答える