Lambda fonksiyonu - lambda anahtar kelimesi ile tanımlanan anonim (isimsiz) bir fonksiyondur. Genellikle "bir kerelik ve yerinde" kısa bir fonksiyona ihtiyaç duyulduğunda kullanılır.
add = lambda x, y: x + y print(add(1, 2)) # 3
Lambda fonksiyonlarının sınırlamaları:
Lambda ne zaman faydalıdır:
sorted, filter, map içinde).Lambda'dan ne zaman vazgeçilmeli:
Soru: Lambda fonksiyonları dış kapsamdan değişkenleri kullanabilir mi ve bu durum döngüler içinde çalışırken nasıl bir etki yaratır?
Cevap: Lambda fonksiyonları dış bağlamdan değişkenleri kapatabilir (leksikal kaplama). Bir döngü içinde tanımlandıklarında, bu genellikle beklenmedik bir davranışa yol açar - lambda, çağrılma anında değişkenin mevcut değerini kullanır, tanımlama anındaki değeri değil.
funcs = [] for i in range(3): funcs.append(lambda: i) # tüm fonksiyonlar 2 döndürür (i=2 döngüden sonra) print([f() for f in funcs]) # [2, 2, 2]
"Eski" değeri kapatmak için:
funcs = [] for i in range(3): funcs.append(lambda i=i: i) print([f() for f in funcs]) # [0, 1, 2]
Hikaye
Proje, belirli bir anahtara göre sözlük listesini filtrelemek için lambda kullanıyordu. Döngü içinde tanımlanan lambda, çağrılma anında farklı (beklenmedik) bir değere sahip olan değişkeni kapatıyordu. Sonuç - yanlış filtreleme ve raporlama hataları.
Hikaye
Büyük bir Django projesi: lambda fonksiyonu içinde uzun bir ifade olarak gerçekleştirilen karmaşık bir doğrulama formu. Sonrasında iş mantığı değişti, lambda tüm kodu barındıramaz hale geldi, normal bir fonksiyona yeniden yazmak zorunda kaldık. Lambda hata ayıklamayı yavaşlattı.
Hikaye
Bir girişimde, sıralama fonksiyonu ile lambda kullanımı başarısız oldu ve yanlış tip (örneğin, bir demet yerine bir liste) döndürdüğünü unuttular. Bu, öngörülemeyen sıralamalara ve veri tekilleştirme hatalarına yol açıyordu.