Salt la conținutul principal
Modulul 5 · Lecția 4 din 420/36 în curs~10 min
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ă:

Python
lambda parametri: espressione

Echivalent cu def, dar mai concis și potrivit pentru „de aruncat” funcții pentru a trece la alte funcții.

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

Diferențe față de def

Aspectdeflambda
numenecesaranonim
corpafirmații multipleo SINGURĂ expresie
întoarcereexplicitimplicit (expresia)
docstringdanu

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.

Python
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:

Python
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 age

Alte utilizări tipice: min(...), max(...), filter(...), map(...).

Python
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ă

Exercițiu#python.m5.l4.e1
Încercări: 0Se încarcă…

Având în vedere lista `cuvinte = ['banana', 'kiwi', 'mela', 'fragola']`, sortați-o după lungime crescătoare în `după_lungime`. Evaluați `după_lungime`.

Se încarcă editorul...
Afișează indiciu

cheie=len (sau lambda p: len(p)).

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m5.l4.e2
Încercări: 0Se încarcă…

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`.

Se încarcă editorul...
Afișează indiciu

lambda p: p[1]

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m5.l4.e3
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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