Lambdas aslında fonksiyonel programlamadaki fikirlerden kaynaklanan çok güçlü yapılardır ve Python'un yakın gelecekte hiçbir şekilde kolayca gözden geçirilemeyecek, yeniden tanımlanmayacak veya kaldırılamayacak bir şeydir. Fonksiyonları parametre olarak geçirmenize izin verdiği için daha güçlü olan kod yazmanıza yardımcı olurlar, böylece birinci sınıf vatandaşlar olarak fonksiyon fikri.
Lambdas kafa karıştırıcı olma eğilimindedir, ancak sağlam bir anlayış elde edildikten sonra, böyle temiz zarif bir kod yazabilirsiniz:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
Yukarıdaki kod satırı, listedeki sayıların karelerinin bir listesini döndürür. Tabii ki, bunu da yapabilirsiniz:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
Önceki kodun daha kısa olduğu açıktır ve özellikle harita işlevini (veya parametre olarak bir işlevi alan benzer bir işlevi) tek bir yerde kullanmayı düşünüyorsanız bu doğrudur. Bu aynı zamanda kodu daha sezgisel ve zarif hale getirir.
Ayrıca, @David Zaslavsky'nin cevabında da belirtildiği gibi, özellikle listeniz belirsiz bir matematiksel yoldan değerler almak zorundaysa, liste kavrayışları her zaman gitmenin yolu değildir.
Daha pratik bir bakış açısıyla, son zamanlarda benim için lambdaların en büyük avantajlarından biri GUI ve olay güdümlü programlama olmuştur. Tkinter'deki geri çağrılara bakarsanız, argüman olarak aldıkları tek şey onları tetikleyen olaydır. Örneğin
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
Şimdi ya geçmeniz gereken bazı argümanlarınız varsa? Bir fare tıklamasının koordinatlarını saklamak için 2 argümanı geçirmek kadar basit bir şey. Kolayca şöyle yapabilirsiniz:
def main():
# define widgets and other imp stuff
x, y = None, None
widget.bind("<Button-1>", lambda event: do-something-cool(x, y))
def do-something-cool(event, x, y):
x = event.x
y = event.y
#Do other cool stuff
Şimdi, bunun küresel değişkenler kullanılarak yapılabileceğini iddia edebilirsiniz, ancak özellikle küresel değişken sadece belirli bir yerde kullanılacaksa, başınızı bellek yönetimi ve sızıntı konusunda endişelenmek istiyor musunuz? Bu sadece zayıf programlama tarzı olurdu.
Kısacası, lambdalar harika ve asla hafife alınmamalıdır. Python lambdas, LISP lambdas ile aynı değildir (daha güçlüdür), ancak onlarla gerçekten çok fazla sihirli şey yapabilirsiniz.