Articolo originale: Functions in Python – Explained with Code Examples

In qualsiasi linguaggio di programmazione, le funzioni facilitano la riutilizzabilità del codice. In poche parole, quando vuoi fare qualcosa ripetutamente puoi definire qualcosa come una funzione e chiamare quella funzione ogni volta che ne hai bisogno.

In questo tutorial, impareremo di più sulle funzioni definite dall'utente in Python.

Quando hai iniziato a programmare in Python, avrai dovuto usare la funzione integrata print() nel tuo programma Hello World! 😀 e la funzione input() per leggere gli input forniti dall'utente.

Fintanto che sai come usare queste funzioni, non devi preoccuparti di come sono state implementate.

Nell'ambito della programmazione, ciò viene chiamato astrazione. Ti permette di usare delle funzioni chiamandole con gli argomenti richiesti, senza doverti preoccupare di come funzionino effettivamente.

Ci sono moltissime funzioni integrate in Python. In questo articolo, vedremo come definire e usare delle funzioni scritte da noi. Iniziamo!

Sintassi delle Funzioni di Python

Il seguente blocco di codice mostra la sintassi generale che serve a definire una funzione in Python:

def nome_funzione(parametri):
    # Quello che fa la funzione va qui
    return risultato 
  • Devi usare la parola chiave def , dare un nome alla funzione seguito da un paio di parentesi, e chiudere la riga con i due punti (:).
  • Se la tua funzione prende degli argomenti, i nomi degli argomenti (parametri) vengono menzionati all'interno delle parentesi.
  • Nota bene che nella definizione di funzione, gli argomenti che la tua funzione utilizza vengono chiamati parametri.
  • Quando chiami la funzione specificando dei valori per questi parametri, essi vengono chiamati argomenti o parametri effettivi. Questo perché, nella chiamata della funzione, gli argomenti sono i valori dei parametri della funzione.
  • Dopodiché, inizi un blocco rientrato. Esso sarà il corpo della funzione che descrive che cosa fa la tua funzione.
  • C'è una dichiarazione return che restituisce il risultato dell'operazione eseguita sugli argomenti. La dichiarazione return restituisce il comando al punto in cui la funzione è stata originariamente chiamata.

Nota che gli argomenti e la dichiarazione return sono opzionali. Ciò significa che potresti avere una funzione che non prende nessun argomento, e non restituisce niente. 😀

Proviamo ora a capire ciò che è stato detto sopra usando dei semplici esempi.

Come Creare una Semplice Funzione in Python

Creiamo ora una semplice funzione di Python che saluta l'utente, come mostrato di seguito:

def my_func():
  print("Ciao! Spero che tu stia bene")

Come puoi vedere, la funzione my_func():

  • non prende argomenti,
  • non restituisce nulla, e
  • stampa "Ciao! Spero che tu stia bene" ogni volta che viene chiamata.

Nota che la definizione di funzione in alto è inerte finché la funzione non viene attivata o chiamata. Facciamo una prova e chiamiamo la funzione my_func() e controlliamo il suo output.

my_func()

# Output
Ciao! Spero che tu stia bene

Come Creare una Funzione con Argomenti in Python

Adesso modificheremo la funzione my_func() così che includa il nome e la città dell'utente.

def my_func(nome, città):
  print(f"Ciao {nome}! Vieni da {città}?")

Possiamo chiamare my_func() passando due stringhe per il nome e la città dell'utente, come mostrato in basso.

my_func("Jane","Parigi")

# Output
Ciao Jane! Vieni da Parigi?

Cosa succede se inserisci prima la città e poi il nome? Scopriamolo.

my_func("Roma","Robert")

# Output
Ciao Roma! Vieni da Robert?

Otteniamo Ciao Roma! Vieni da Robert? – e non ha senso! 🙂Che cosa causa questo problema?

Gli argomenti passati nella chiamata della funzione sono argomenti posizionali. Ciò significa che il primo argomento nella chiamata di funzione è usato come valore del primo parametro (nome) e il secondo argomento nella chiamata di funzione è usato come valore del secondo parametro (città).

Osserva il blocco di codice in basso. Invece di specificare solo gli argomenti, abbiamo menzionato i parametri e il valore che prendono.

my_func(città="Roma",nome="Robert")

# Output
Ciao Robert! Vieni da Roma?

Questi sono chiamati argomenti a parola chiave. L'ordine degli argomenti nella chiamata della funzione non è importante a patto che i nomi dei parametri siano corretti.

Come Creare una Funzione con Argomenti Predefiniti in Python

E se avessimo determinati parametri che assumono uno specifico valore la maggior parte delle volte in cui viene chiamata la funzione?

Non esiste un modo migliore di chiamare la funzione specificando sempre lo stesso valore per un parametro in particolare?

Certo che esiste, ed è a questo che servono i default arguments (argomenti predefiniti)! 😀

Creiamo una funzione total_calc() che ci aiuta a calcolare e visualizzare il totale da pagare al ristorante. Dati un conto e la percentuale del conto che scegli di lasciare come mancia (perc_mancia), questa funzione calcola il totale da pagare.

Nota che la definizione della funzione include il valore predefinito del parametro perc_mancia da usare quando l'utente non specifica una percentuale di mancia.

Esegui il blocco di codice in basso.👇🏽 Ora la tua funzione è pronta!

def total_calc(conto, perc_mancia=10):
  totale = conto * (1 + 0.01*perc_mancia)
  totale = round(totale, 2)
  print(f"Si prega di pagare ${totale}")

Ora chiamiamo la funzione in modi diversi. Il blocco di codice in basso mostra le seguenti situazioni:

  • Quando chiami la funzione total_calc specificando solo il conto, in automatico viene usata la percentuale di mancia del 10%.
  • Quando specifichi esplicitamente la percentuale di mancia, viene usata la percentuale specificata nella chiamata di funzione.
# specifica solo il conto
# viene usato solo il valore predefinito della percentuale di mancia

 total_calc(150)
 # Output
 Si prega di pagare $165.0
 
 # specifica sia il conto che una percentuale di mancia a scelta
 # viene usata la percentuale di mancia specificata nella chiamata di funzione
 
 total_calc(200,15)
 # Output
 Si prega di pagare $230.0
 
 total_calc(167,7.5)
 # Output
 Si prega di pagare $179.53
 

Come Creare una Funzione che Restituisce un Valore in Python

Fino ad ora abbiamo creato solo funzioni che possono prendere o non prendere argomenti e non restituiscono nulla. Adesso, creiamo una semplice funzione che restituisce il volume di un cuboide dati la lunghezza, la larghezza e l'altezza.

def volume_di_cuboide(lunghezza,larghezza,altezza):
  return lunghezza*larghezza*altezza
  
  

Ricorda che la parola chiave return restituisce il comando al punto in cui la funzione è stata chiamata. La chiamata di funzione viene restituita dal return value (valore restituito) dalla funzione.

Chiamiamo la funzione volume_di_cuboide() con gli argomenti di dimensione necessari, come mostrato nel blocco di codice in basso. Fai caso al modo in cui usiamo la variabile volume per immagazzinare il valore restituito dalla funzione.

volume = volume_di_cuboide(5.5,20,6)
print(f"Il volume del cuboide è di {volume} unità cubiche")

# Output
Il volume del cuboide è di 660.0 unità cubiche

Come Creare una Funzione che Restituisce Molteplici Valori in Python

Negli esempi che abbiamo fatto prima, la funzione volume_di_cuboide() restituiva un solo valore, ossia il volume del cuboide date le sue dimensioni. Vediamo come possiamo far restituire molteplici valori a una funzione.

  • Per far restituire molteplici valori a una funzione, dobbiamo semplicemente specificare i valori da restituire, separati da una virgola.
  • In automatico, la funzione restituisce i valori come tupla. Se ci sono N valori di ritorno, otterremo una tupla di dimensione N.

Creiamo una semplice funzione cubo() che restituisce il volume e l'area di superficie totale di un cubo, data la lunghezza del suo spigolo.

def cubo(spigolo):
  volume = spigolo **3
  area_superficie = 6 * (spigolo**2)
  return volume, area_superficie

Per verificare che sia stata restituita una tupla, immagazziniamola in una variabile valori_restituiti, come mostrato in basso:

valori_restituiti = cubo(8)
print(valori_restituiti)

# Output
(512, 384)

Adesso, possiamo spacchettare la tupla e inserire i valori in due variabili diverse.

volume, area = cubo(6.5)
print(f"Il volume del cubo è di {volume} unità cubiche e l'area di superficie totale è di {area} unità quadrate.")

# Outputs
Il volume del cubo 274.625 è di unità cubiche e l'area di superficie totale è di 253.5 unità quadrate

Come Creare una Funzione che Prende un Numero Variabile di Argomenti in Python

Cominciamo ponendoci alcune domande:

  • E se non sapessimo in anticipo il numero esatto di argomenti che ci servono?
  • Possiamo creare funzioni che lavorano con un numero variabile di argomenti?

La risposta è sì! E creeremo una funzione del genere proprio adesso.

Creiamo una semplice funzione my_var_sum() che restituisce la somma di tutti i numeri passati come argomento. Tuttavia, il numero di argomenti potrebbe essere diverso ogni volta che chiamiamo la funzione.

Nota come la definizione di funzione adesso ha *args invece di avere semplicemente il nome del parametro. Nel corpo della funzione, iteriamo attraverso args finché non abbiamo usato tutti gli argomenti. La funzione my_var_sum restituisce la somma di tutti i numeri passati come argomento.

def my_var_sum(*args):
  somma = 0
  for arg in args:
    somma += arg
  return somma

Adesso chiamiamo la funzione my_var_sum() con un numero diverso di argomenti ogni volta e controlliamo velocemente che le risposte restituite siano corrette! 🙂

# Esempio 1 con 4 numeri
somma = my_var_sum(99,10,54,23)
print(f"La somma dei tuoi numeri è {somma}")
# Output
La somma dei tuoi numeri è 186

# Esempio 2 con 3 numeri
somma = my_var_sum(9,87,45)
print(f"La somma dei tuoi numeri è {somma}")
# Output
La somma dei tuoi numeri è 141

# Esempio 3 con 6 numeri
somma = my_var_sum(5,21,36,79,45,65)
print(f"La somma dei tuoi numeri è {somma}")
# Output
La somma dei tuoi numeri è 251

Riassumiamo velocemente ciò di cui abbiamo parlato. In questo tutorial abbiamo imparato:

  • come definire delle funzioni,
  • come passare argomenti ad una funzione,
  • come creare funzioni con argomenti predefiniti e con un numero variabile di argomenti, e
  • come creare una funzione che restituisca dei valori.

Spero che ti sia piaciuto leggere questo articolo. Grazie per aver letto. Come sempre, alla prossima! 😀