Çok satırlı lambdaların daha ilginç bir uygulaması. Python'un, kodu yapılandırmanın bir yolu olarak girintileri nasıl kullandığı nedeniyle elde etmek mümkün değildir.
Ancak neyse ki bizim için girinti biçimlendirme diziler ve parantez kullanılarak devre dışı bırakılabilir.
Bazılarının belirttiği gibi, kodunuzu şöyle yazabilirsiniz:
lambda args: (expr1, expr2,... exprN)
Teoride, soldan sağa değerlendirme yapacağınız garanti edilirse işe yarayacaktır, ancak yine de bir ifadeden diğerine aktarılan değerleri kaybedersiniz.
Biraz daha ayrıntılı olana ulaşmanın bir yolu,
lambda args: [lambda1, lambda2, ..., lambdaN]
Her lambda bir öncekinden argümanlar alır.
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
Bu yöntem, biraz lisp / şema gibi bir şey yazmanıza izin verir.
Böylece böyle şeyler yazabilirsiniz:
let(lambda x, y: x+y)((1, 2))
Hipotenüsü hesaplamak için daha karmaşık bir yöntem kullanılabilir
lst = [(1,2), (2,3)]
result = map(let(
lambda x, y: (x**2, y**2),
lambda x, y: (x + y) ** (1/2)
), lst)
Bu, skaler sayıların bir listesini döndürür, böylece birden çok değeri bire düşürmek için kullanılabilir.
Birçok lambdaya sahip olmak kesinlikle çok verimli olmayacak, ancak kısıtlıysanız, hızlı bir şekilde bir şey yapmanın iyi bir yolu olabilir, daha sonra gerçek bir işlev olarak yeniden yazabilirsiniz.