ProgramlamaPython geliştirici

Python'daki lambda fonksiyonları hakkında konuşun. Geleneksel fonksiyonlarla karşılaştırıldığında sınırlamaları nelerdir? Hangi durumlarda tercih edilir, hangi durumlarda kaçınılmalıdır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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 yalnızca bir ifade içerebilir - bu da dönen değerdir, birden fazla satırlı hesaplamalar, return, if-else türü koşullar (yalnızca ternary ifadeler şeklinde) yapılamaz.
  • Try/except, döngüler vs. gibi karmaşık kodlar kullanılamaz.
  • Lambda tam kapsamlı bir belgeleme sunmaz (docstring eklenemez).
  • Lambda fonksiyonu, özellikle iç içe kullanıldığında daha az okunabilir.

Lambda ne zaman faydalıdır:

  • Tek satırlık sıralama/filtreleme anahtarlarında (key parametreleri; örneğin, sorted, filter, map içinde).
  • Kodun yeniden kullanımına ihtiyaç olmadığında - yerel işlemler, hızlıca "fonksiyonu yerleştirmek" için.

Lambda'dan ne zaman vazgeçilmeli:

  • Karmaşık mantıkta: tekrar kullanım için, çok fazla kod veya koşul içeriyorsa, anlaşılabilirlik ve okunabilirlik için adlandırılmış bir def-fonksiyonuna çıkarmak daha iyidir.

Kandırmaca Soru

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]

Konunun inceliklerini bilmemekten kaynaklanan gerçek hatalara örnekler


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.