マルチラインラムダのより興味深い実装を次に示します。Pythonがコードを構造化する方法としてインデントをどのように使用するかにより、達成することは不可能です。
しかし、幸運なことに、インデントの書式設定は配列と括弧を使用して無効にできます。
すでに指摘したように、コードは次のように書くことができます。
lambda args: (expr1, expr2,... exprN)
理論的には、左から右への評価が保証されている場合は機能しますが、1つの式から別の式に渡される値は失われます。
もう少し冗長なものを実現する1つの方法は、
lambda args: [lambda1, lambda2, ..., lambdaN]
各ラムダは、前のラムダから引数を受け取ります。
def let(*funcs):
def wrap(args):
result = args
for func in funcs:
if not isinstance(result, tuple):
result = (result,)
result = func(*result)
return result
return wrap
このメソッドでは、少しlisp / schemeのようなものを記述できます。
したがって、次のように書くことができます。
let(lambda x, y: x+y)((1, 2))
斜辺を計算するために、より複雑な方法を使用できます
lst = [(1,2), (2,3)]
result = map(let(
lambda x, y: (x**2, y**2),
lambda x, y: (x + y) ** (1/2)
), lst)
これはスカラー数のリストを返すため、複数の値を1つに減らすために使用できます。
多くのラムダを使用することは確かに効率的ではありませんが、制約がある場合は、何かをすばやく実行し、後で実際の関数として書き直すのに良い方法です。