Lecții din modul (4/4)
Lambda și funcții de ordin superior
O lambda este o funcție anonimă, definită pe o singură linie. Sintaxă:
lambda parametri: espressioneEchivalent cu def, dar mai concis și potrivit pentru „de aruncat”
funcții pentru a trece la alte funcții.
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2Diferențe față de def
| Aspect | def | lambda |
|---|---|---|
| nume | necesar | anonim |
| corp | afirmații multiple | o SINGURĂ expresie |
| întoarcere | explicit | implicit (expresia) |
| docstring | da | nu |
Nu return în interiorul unei lambda: valoarea expresiei ESTE rezultatul.
Când să folosiți lambda
Aproape întotdeauna: ca argument key pentru funcțiile de sortare sau selecție.
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']key=len îi spune lui sorted: „pentru a compara două elemente, folosiți lungimea lor”. Pentru
criterii personalizate, utilizați lambda:
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 ageAlte utilizări tipice: min(...), max(...), filter(...), map(...).
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n)) # -5 (maximum by absolute value)Funcții de ordin superior
O funcție este de ordin superior dacă acceptă o funcție ca argument sau
returnează unul. sorted, max, filter, map sunt de ordin superior. Lambda
există tocmai pentru a ușura apelurile de ordin superior.
Când să evitați funcțiile lambda
Funcțiile Lambda sunt utile pentru operațiuni scurte, de aruncat (cum ar fi sortarea rapidă). Cu toate acestea, dacă vă aflați că atribuiți o lambda unei variabile (de exemplu, double = lambda x: x * 2), în general, este de preferat să utilizați un bloc standard def în scopuri de lizibilitate și depanare (din moment ce funcțiile definite cu def își păstrează numele real în eroare).
Încearcă
Având în vedere lista `cuvinte = ['banana', 'kiwi', 'mela', 'fragola']`, sortați-o după lungime crescătoare în `după_lungime`. Evaluați `după_lungime`.
Afișează indiciu
cheie=len (sau lambda p: len(p)).
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Având în vedere lista de tupluri `points = [(1, 5), (3, 2), (2, 4)]`, sortați-le după elementul AL DOILEA în ordine crescătoare și atribuiți-le lui `by_y`. Evaluați `by_y`.
Afișează indiciu
lambda p: p[1]
Soluție disponibilă după 3 încercări
Provocare suplimentară
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.
Afișează indiciu
Scrieți is_even = lambda x: x % 2 == 0 și apoi apelați is_even(8).
Soluție disponibilă după 3 încercări