Salta ai contenuti
Manuale LogoManuale Logo

Funzioni lambda

Per una funzione breve, con una sola espressione, puoi usare una funzione lambda invece di definirla con def.

È una funzione senza nome, scritta in una riga e senza return esplicito.

lambda parametri: espressione

Confronta una funzione normale con la sua versione lambda:

# Funzione normale
def raddoppia(x):
return x * 2
# La stessa cosa come lambda
raddoppia_lambda = lambda x: x * 2
print(raddoppia(5)) # 10
print(raddoppia_lambda(5)) # 10

Puoi anche avere più parametri:

somma = lambda a, b: a + b
print(somma(3, 5)) # 8

Le lambda sono utili quando devi passare una “piccola funzione” come argomento a un’altra funzione, per esempio con sorted(), map() e filter().

Se hai una lista di tuple e vuoi ordinarla in base al secondo elemento, puoi usare una lambda:

studenti = [
("Alice", 16),
("Bob", 15),
("Carlo", 17)
]
# Ordina per età (il secondo elemento di ogni tupla)
ordinati = sorted(studenti, key=lambda s: s[1])
print(ordinati)
# [('Bob', 15), ('Alice', 16), ('Carlo', 17)]

map() applica una funzione a ogni elemento di una sequenza:

numeri = [1, 2, 3, 4, 5]
quadrati = list(map(lambda x: x ** 2, numeri))
print(quadrati) # [1, 4, 9, 16, 25]

Il codice equivale a: “per ogni numero nella lista, calcola il suo quadrato”.

filter() tiene solo gli elementi per cui la funzione restituisce True:

numeri = [1, 2, 3, 4, 5, 6, 7, 8]
pari = list(filter(lambda x: x % 2 == 0, numeri))
print(pari) # [2, 4, 6, 8]

Il filtro conserva i numeri che, divisi per 2, danno resto zero.

Una lambda può contenere solo una singola espressione. Non è adatta a più istruzioni, cicli o blocchi if...elif...else distribuiti su più righe.

Quando la logica supera una singola espressione, usa una funzione definita con def:

# Questo va bene con lambda:
doppio = lambda x: x * 2
# Questo è troppo complesso, usa def:
def classifica(voto):
if voto >= 9:
return "Ottimo"
elif voto >= 6:
return "Sufficiente"
else:
return "Insufficiente"