Funzioni in Python
Questo articolo spiega le funzioni in Python.
YouTube Video
Funzioni in Python
Le funzioni in Python sono una funzionalità essenziale per definire blocchi di codice riutilizzabili, consentendoti di organizzare e semplificare il tuo programma richiamandole secondo necessità. L'uso delle funzioni può migliorare la leggibilità del codice e rispettare il principio DRY (Don't Repeat Yourself, evitare di scrivere lo stesso codice più volte).
Definire le Funzioni
Le funzioni sono definite utilizzando la parola chiave def
. La sintassi di base è la seguente:.
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_value
Ad esempio, per definire una funzione che somma due numeri, scriveresti:.
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + y
Richiamare le Funzioni
Una funzione definita può essere richiamata e utilizzata come segue:.
1result = add(3, 4)
2print(result) # Output: 7
Componenti di una Funzione
-
Nome della Funzione: Il nome della funzione, utilizzato per richiamarla.
-
Argomenti (Parametri): Nomi di variabili che ricevono i dati passati durante la chiamata. Puoi definire zero o più argomenti.
-
Stringa di documentazione (Docstring): Una stringa utilizzata per descrivere lo scopo e l'utilizzo di una funzione. Opzionale.
-
Corpo della Funzione: Un blocco indentato in cui sono scritte le istruzioni eseguite dalla funzione.
-
Valore di Ritorno: Il valore restituito al chiamante utilizzando l'istruzione
return
. Sereturn
viene omesso, viene restituitoNone
per impostazione predefinita.
Tipi di Argomenti
In Python, esistono diversi tipi di argomenti.
- Argomenti Posizionali: Il metodo standard per passare argomenti alle funzioni.
- Argomenti Predefiniti: Argomenti con valori predefiniti che possono essere omessi durante la chiamata.
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"
- Argomenti di lunghezza variabile:
*args
per ricevere più argomenti posizionali come una tupla, e**kwargs
per riceverli come un dizionario.
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}
Utilizzando correttamente le funzioni, puoi scrivere programmi Python in modo più efficace ed efficiente.
Funzioni Lambda in Python
In Python, le funzioni lambda
sono utilizzate per definire funzioni anonime e concise. A differenza delle funzioni definite con la parola chiave def
, lambda
permette di creare funzioni brevi in una sola riga. Qui spiegheremo in dettaglio le funzioni lambda
in Python.
Basi delle funzioni lambda
Le funzioni lambda
, chiamate anche funzioni anonime, sono utilizzate per definire funzioni temporanee prive di nome, come suggerisce il nome. La sintassi di base è la seguente:.
1lambda arguments: expression
arguments
: Specifica gli argomenti della funzione. È possibile specificare più argomenti, separandoli con una virgola.expression
: Questa è un'espressione che viene valutata in base agli argomenti. Il risultato dell'espressione diventa il valore di ritorno della funzione.
Ad esempio, il codice seguente definisce ed esegue una funzione lambda
che somma due numeri.
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8
In questo esempio, lambda x, y: x + y
è una funzione lambda
che accetta due argomenti, x
e y
, e restituisce la loro somma.
Casi d'uso delle funzioni lambda
Le funzioni lambda
sono utili in situazioni in cui è necessario definire una funzione semplice al volo. Sono particolarmente comuni nei seguenti casi:.
-
Quando vengono passate come argomenti a funzioni
- È utile nelle funzioni di ordine superiore (funzioni che accettano altre funzioni come argomenti) quando si passano funzioni brevi e temporanee.
-
Quando si specificano chiavi per l'ordinamento di liste
- Sono utili per specificare criteri di ordinamento (chiavi) in funzioni come
sort()
osorted()
.
- Sono utili per specificare criteri di ordinamento (chiavi) in funzioni come
Esempi di utilizzo nelle funzioni di ordine superiore
Esempi tipici di funzioni di ordine superiore includono map()
, filter()
e reduce()
. Queste funzioni accettano altre funzioni come argomenti e le applicano a sequenze come liste.
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]
In questo esempio, una funzione lambda
viene passata alla funzione map()
per calcolare il quadrato di ciascun numero in una lista.
Esempi di utilizzo dell'ordinamento delle liste
La funzione lambda
può talvolta essere utilizzata per specificare una chiave personalizzata durante l'ordinamento di una lista. Ad esempio, il seguente codice ordina una lista di tuple in base al secondo elemento.
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
In questo esempio, una funzione lambda
è utilizzata per ordinare le tuple in base al loro secondo elemento (una stringa).
filter()
e lambda
La funzione filter()
viene utilizzata per filtrare elementi in una lista (o in un altro iterabile) in base a una condizione specifica.
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]
In questo esempio, i numeri pari in una lista vengono filtrati per creare una nuova lista.
lambda
e reduce()
La funzione reduce()
viene utilizzata per ridurre una lista a un unico valore. Può essere implementata facilmente utilizzando una funzione lambda
.
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120
In questo esempio, tutti gli elementi nella lista vengono moltiplicati insieme per produrre un risultato.
Evita di utilizzare funzioni lambda
complesse
Il vantaggio delle funzioni lambda
è la loro brevità, ma diventano più difficili da leggere quando utilizzate per implementare logica complessa. Pertanto, è opportuno utilizzarle per operazioni semplici che possono essere espresse in una sola riga. Per operazioni complesse, definire una funzione con def
è più leggibile e più facile da mantenere.
Ad esempio, dovresti evitare di utilizzare funzioni lambda
complesse come quella riportata di seguito.
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)
In questo caso, è meglio utilizzare una funzione definita con def
, come mostrato di seguito.
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2
Conclusione
Le funzioni lambda
di Python sono uno strumento comodo per definire funzioni temporanee e brevi. Sono spesso utilizzate in funzioni di ordine superiore o operazioni sulle liste per definire in modo conciso condizioni specifiche. Tuttavia, le funzioni lambda
dovrebbero essere limitate a compiti semplici, mentre per logica complessa sono preferibili le funzioni def
.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.