Modül dersleri (4/4)
Lambda ve üst düzey fonksiyonlar
lambda tek bir satırda tanımlanan anonim bir işlevdir. Sözdizimi:
lambda parametri: espressionedef ile eşdeğerdir, ancak daha kısa ve "tek kullanımlık" için daha uygun
diğer işlevlere geçmek için işlevler.
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2Farklılıklar ve def
| Görünüş | def | lambda |
|---|---|---|
| isim | gerekli | anonim |
| vücut | çoklu ifadeler | TEK bir ifade |
| dönüş | açık | örtülü (ifade) |
| belge dizisi | evet | hayır |
Lambda içinde return yok: ifadenin değeri sonuçtur.
Lambda ne zaman kullanılır?
Neredeyse her zaman: sıralama veya seçim işlevleri için key bağımsız değişkeni olarak.
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']key=len, sorted'a şunu söyler: "iki öğeyi karşılaştırmak için uzunluklarını kullanın". için
özel ölçütler, lambda kullanın:
utenti = [
{"nome": "Ada", "eta": 36},
{"nome": "Linus", "eta": 54},
{"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending ageDiğer tipik kullanımlar: min(...), max(...), filter(...), map(...).
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n)) # -5 (maximum by absolute value)Daha yüksek dereceli işlevler
Bir işlev, bir işlevi bağımsız değişken olarak kabul ediyorsa yüksek dereceli'dir veya
birini döndürür. sorted, max, filter, map daha yüksek düzeydedir. Lambda
üst düzey aramaları kolaylaştırmak için tam olarak mevcuttur.
Lambda işlevlerinden ne zaman kaçınılmalıdır?
Lambda işlevleri kısa, tek kullanımlık işlemler (hızlı sıralama gibi) için kullanışlıdır. Bununla birlikte, kendinizi bir değişkene bir lambda atarken bulursanız (örneğin, double = lambda x: x * 2), okunabilirlik ve hata ayıklama amacıyla genellikle standart bir def bloğunun kullanılması tercih edilir (çünkü def ile tanımlanan işlevler, hata izlemelerinde gerçek adlarını korur).
Deneyin
`Kelimeler = ['muz', 'kivi', 'mela', 'fragola']` listesi verildiğinde, bunu uzunluğa göre "uzunluğa göre" artan şekilde sıralayın. "uzunluğa göre" değerlendirin.
İpucu göster
anahtar=len (veya lambda p: len(p)).
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
'points = [(1, 5), (3, 2), (2, 4)]' demetlerinin listesi verildiğinde, bunları SECOND öğesine göre artan sırada sıralayın ve 'by_y'ye atayın. "by_y"ye göre değerlendirin.
İpucu göster
lambda p: p[1]
3 denemeden sonra çözüm mevcut
Ek zorluk
Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.
İpucu göster
is_even = lambda x: x % 2 == 0 yazın ve ardından is_even(8)'i çağırın.
3 denemeden sonra çözüm mevcut