Come utilizzare le funzioni Lambda in Python [With Examples]

In questo tutorial imparerai tutto sulle funzioni lambda in Python, dalla sintassi per definire le funzioni lambda ai diversi casi d’uso con esempi di codice.

In Python, le lambda sono funzioni anonime che hanno una sintassi concisa e possono essere utilizzate con altre utili funzioni integrate. Alla fine di questo tutorial, avrai imparato come definire le funzioni lambda e quando dovresti considerare di usarle su normali funzioni Python.

Cominciamo!

Funzione Python Lambda: sintassi ed esempi

Ecco la sintassi generale per definire una funzione lambda in Python:

lambda parameter(s):return value

Nella sintassi generale sopra:

  • lambda è la parola chiave che dovresti usare per definire una funzione lambda, seguita da uno o più parametri che la funzione dovrebbe assumere.
  • Sono presenti due punti che separano i parametri e il valore restituito.

💡 Quando si definisce una funzione lambda, è necessario assicurarsi che il valore restituito venga calcolato valutando un’espressione che si estende su una singola riga di codice. Lo capirai meglio quando codifichiamo esempi.

Esempi di funzioni Python Lambda

Il modo migliore per comprendere le funzioni lambda è iniziare riscrivendo le normali funzioni Python come funzioni lambda.

👩🏽‍💻 Puoi programmare insieme in un Python REPL o nell’editor Python online di winadmin.it.

# 1. Si consideri la seguente funzione square(), che accetta un numero, num, come argomento e restituisce il quadrato del numero.

def square(num):
    return num*num

Puoi chiamare la funzione con argomenti e verificare che funzioni correttamente.

>>> square(9)
81
>>> square(12)
144

Puoi assegnare questa espressione lambda a un nome di variabile, ad esempio quadrato1 per rendere la definizione della funzione più concisa: quadrato1 = lambda num: num*num e quindi chiamare la funzione square1 con qualsiasi numero come argomento. Tuttavia, sappiamo che le lambda sono funzioni anonime, quindi dovresti evitare di assegnarle a una variabile.

Per la funzione square(), il parametro è num e il valore restituito è num*num. Dopo averli identificati, possiamo inserirli nell’espressione lambda e chiamarla con un argomento, come mostrato:

>>> (lambda num: num*num)(2)
4

Questo è il concetto di Espressione di funzione richiamata immediatamente, in cui chiamiamo una funzione subito dopo averla definita.

#2. Quindi, riscriviamo un’altra semplice funzione add() che prende in numeri, num1 e num2, e restituisce la loro somma, num1 + num2.

def add(num1,num2):
    return num1 + num2

Chiamiamo la funzione add() con due numeri come argomenti:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

In questo caso, num1 e num2 sono i due parametri e il valore restituito è num1 + num2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

Le funzioni Python possono anche assumere valori predefiniti per i parametri. Modifichiamo la definizione della funzione add() e impostiamo il valore predefinito del parametro num2 a 10.

def add(num1, num2=10):
    return num1 + num2

Nelle seguenti chiamate di funzione:

  • Nella prima chiamata di funzione, il valore di num1 è 1 e il valore di num2 è 3. Quando si passa il valore di num2 nella chiamata di funzione, viene utilizzato quel valore; la funzione restituisce 4.
  • Tuttavia, se si passa un solo argomento (num1 è 7), viene utilizzato il valore predefinito di 10 per num2; la funzione restituisce 17.
>>> add(1,3)
4
>>> add(7)
17

Quando si scrivono funzioni che accettano valori predefiniti per determinati parametri come espressioni lambda, è possibile specificare il valore predefinito durante la definizione dei parametri.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Quando dovresti usare le funzioni Lambda in Python?

Ora che hai appreso le basi delle funzioni lambda in Python, ecco alcuni casi d’uso:

  • Quando si dispone di una funzione la cui espressione di ritorno è una singola riga di codice e non è necessario fare riferimento alla funzione altrove nello stesso modulo, è possibile utilizzare le funzioni lambda. Abbiamo anche codificato alcuni esempi per capirlo.
  • È possibile utilizzare le funzioni lambda quando si utilizzano funzioni integrate, come map(), filter() e reduce().
  • Le funzioni Lambda possono essere utili per ordinare le strutture di dati Python come elenchi e dizionari.

Come utilizzare Python Lambda con funzioni integrate

1. Utilizzo di Lambda con map()

La funzione map() accetta un iterabile e una funzione e applica la funzione a ciascun elemento nell’iterabile, come mostrato:

Creiamo un elenco di numeri e utilizziamo la funzione map() per creare un nuovo elenco che contenga il quadrato di ogni numero nell’elenco di numeri. Si noti l’uso della funzione lambda per definire l’operazione di quadratura.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Poiché la funzione map() restituisce un oggetto mappa, dovremmo lanciarlo in una lista.

▶️ Dai un’occhiata a questo tutorial sulla funzione map() in Python.

2. Utilizzo di Lambda con filter()

Definiamo nums, un elenco di numeri:

>>> nums = [4,5,6,9]

Si supponga di voler filtrare questo elenco e conservare solo i numeri dispari.

Puoi usare la funzione filter() incorporata di Python.

La funzione filter() accetta una condizione e un iterable: filter(condizione, iterabile). Il risultato contiene solo gli elementi nell’iterabile originale che soddisfano la condizione. Puoi eseguire il cast dell’oggetto restituito in un iterabile Python come list.

Per filtrare tutti i numeri pari, conserveremo solo i numeri dispari. Quindi l’espressione lambda dovrebbe essere lambda num: num%2!=0. La quantità num%2 è il resto quando num è diviso per 2.

  • num%2!=0 è True ogni volta che num è dispari e
  • num%2!=0 è False ogni volta che num è pari.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Utilizzo di Lambda con reduce()

La funzione reduce() accetta un iterabile e una funzione. Riduce l’iterabile applicando la funzione in modo iterativo agli elementi dell’iterabile.

Per utilizzare la funzione reduce(), dovrai importarla dal modulo functools integrato di Python:

>>> from functools import reduce

Usiamo la funzione reduce() per calcolare la somma di tutti i numeri nell’elenco dei numeri. Definiamo un’espressione lambda: lambda num1,num2:num1+num2, come funzione di somma riduttiva.

L’operazione di riduzione avverrà in questo modo: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Qui f è l’operazione di somma su due voci della lista, definite dalla funzione lambda.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Funzioni Python Lambda per personalizzare l’ordinamento

Oltre a utilizzare le funzioni lambda con funzioni Python integrate, come map(), filter() e reduce(), puoi anche usarle per personalizzare le funzioni ei metodi integrati utilizzati per l’ordinamento.

1. Ordinamento degli elenchi Python

Quando lavori con gli elenchi Python, dovrai spesso ordinarli in base a determinati criteri di ordinamento. Per ordinare gli elenchi Python sul posto, puoi usare il metodo sort() integrato su di essi. Se hai bisogno di una copia ordinata dell’elenco, puoi usare la funzione sorted().

La sintassi per utilizzare la funzione sorted() di Python è ordinata(iterable, key=…,reverse= True | False).

– Il parametro chiave viene utilizzato per personalizzare l’ordinamento.
– Il parametro reverse può essere impostato su True o False; Il valore predefinito è falso.

Quando si ordinano elenchi di numeri e stringhe, l’ordinamento predefinito è rispettivamente in ordine crescente e in ordine alfabetico. Tuttavia, a volte potresti voler definire alcuni criteri personalizzati per l’ordinamento.

Considera il seguente elenco di frutti. Si supponga di voler ottenere una copia ordinata dell’elenco. Dovresti ordinare le stringhe in base al numero di occorrenze di ‘p’ in esse, in ordine decrescente.

>>> fruits = ['apple','pineapple','grapes','mango']

È ora di utilizzare il parametro chiave opzionale. Una stringa è un iterabile in Python e per ottenere il numero di occorrenze di un carattere in essa, puoi usare il metodo integrato .count(). Quindi impostiamo la chiave su lambda x:x.count(‘p’) in modo che l’ordinamento sia basato sul numero di volte che ‘p’ si verifica nella stringa.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

In questo esempio:

  • La chiave su cui eseguire l’ordinamento è il numero di occorrenze del carattere ‘p’ ed è definito come un’espressione lambda.
  • Poiché abbiamo impostato il parametro reverse su True, l’ordinamento avviene nell’ordine decrescente del numero di occorrenze di ‘p’.

Nell’elenco dei frutti, “ananas” contiene 3 occorrenze di “p” e le stringhe “mela”, “uva” e “mango” contengono rispettivamente 2, 1 e 0 occorrenze di “p”.

Capire l’ordinamento stabile

Considera un altro esempio. Per lo stesso criterio di ordinamento, abbiamo ridefinito l’elenco dei frutti. Qui, ‘p’ compare nelle stringhe ‘apple’ e ‘grapes’ rispettivamente due e una volta. E non si verifica mai negli archi “mango” e “melone”.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

Nell’elenco di output, “mango” viene prima di “melone” anche se entrambi non hanno il carattere “p”. Ma perché è così? La funzione sorted() esegue un ordinamento stabile; quindi quando il conteggio di ‘p’ è uguale per due stringhe, l’ordine degli elementi nell’elenco dei frutti originale viene mantenuto.

Come esercizio rapido, scambia le posizioni di “mango” e “melone” nell’elenco dei frutti, ordina l’elenco in base allo stesso criterio e osserva l’output.

▶️ Scopri di più sull’ordinamento degli elenchi Python.

2. Ordinamento di un dizionario Python

Puoi anche usare lambda durante l’ordinamento dei dizionari Python. Considera il seguente dizionario price_dict che contiene gli articoli e i relativi prezzi.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

Per ottenere le coppie chiave-valore di un dizionario come un elenco di tuple, puoi utilizzare il metodo del dizionario integrato .items():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

In Python, tutti gli iterabili: elenchi, tuple, stringhe e altro seguono l’indicizzazione zero. Quindi il primo elemento è all’indice 0, il secondo elemento è all’indice 1 e così via.

Vorremmo ordinare in base al valore, che è il prezzo di ogni articolo nel dizionario. In ogni tupla nell’elenco price_dict_items, l’elemento all’indice 1 è il prezzo. Quindi impostiamo la chiave su lambda x:x[1] poiché utilizzerà l’elemento all’indice 1, il prezzo, per ordinare il dizionario.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

Nell’output, gli elementi del dizionario sono stati ordinati in ordine crescente di prezzo: a partire da ‘Candy’, al prezzo di 3 unità fino a ‘Honey’, al prezzo di 15 unità.

▶️ Per saperne di più, consulta questa guida dettagliata sull’ordinamento di un dizionario Python per chiave e valore.

Riassumendo

E il gioco è fatto! Hai imparato come definire le funzioni lambda e usarle in modo efficace con altre funzioni integrate di Python. Ecco un riassunto dei punti chiave:

  • In Python, le lambda sono funzioni anonime che possono accettare più argomenti e restituire un valore; l’espressione da valutare per generare questo valore restituito deve essere una riga di codice. Possono essere utilizzati per rendere più concise le definizioni di piccole funzioni.
  • Per definire la funzione Lambda è possibile utilizzare la sintassi: parametro/i lambda: valore restituito.
  • Alcuni dei casi d’uso importanti includono il loro utilizzo con le funzioni map(), filter() e reduce() e come parametro chiave per personalizzare l’ordinamento degli iterabili Python.

Quindi, impara come eseguire la divisione del pavimento in Python.