Python: definire e chiamare funzioni con <strong>return</strong> in modo efficace

by theArchitect
SHARE
Python: definire e chiamare funzioni con <strong>return</strong> in modo efficace
© Guida-HTML5.it

Introduzione

Le funzioni sono uno degli strumenti più importanti di Python: permettono di organizzare il codice, evitare ripetizioni e rendere un programma più facile da leggere e mantenere. In questo tutorial ci concentriamo su un sotto-argomento molto pratico e spesso sottovalutato: la differenza tra definire una funzione e chiamarla, con un’attenzione particolare al valore restituito e al suo uso nei programmi reali.

Capire bene questi concetti è fondamentale perché molti errori comuni in Python nascono proprio da qui: una funzione viene scritta correttamente, ma poi non viene invocata nel punto giusto, oppure il risultato viene calcolato ma non salvato o utilizzato. Vedremo quindi come definire una funzione, come chiamarla, come passare dati in ingresso e come sfruttare il valore di ritorno per costruire logica utile.

Codice completo

# Esempio pratico: gestione di un piccolo scontrino con sconto e IVA

def calcola_sconto(prezzo, percentuale_sconto):
    """Restituisce il prezzo scontato."""
    sconto = prezzo * (percentuale_sconto / 100)
    prezzo_finale = prezzo - sconto
    return prezzo_finale

def calcola_totale_con_iva(prezzo, aliquota_iva):
    """Restituisce il prezzo finale con IVA."""
    iva = prezzo * (aliquota_iva / 100)
    totale = prezzo + iva
    return totale

def stampa_riepilogo(nome_prodotto, prezzo, sconto, iva):
    """Stampa un riepilogo leggibile del calcolo."""
    prezzo_scontato = calcola_sconto(prezzo, sconto)
    prezzo_finale = calcola_totale_con_iva(prezzo_scontato, iva)

    print("=== Riepilogo acquisto ===")
    print(f"Prodotto: {nome_prodotto}")
    print(f"Prezzo iniziale: {prezzo:.2f} €")
    print(f"Sconto: {sconto}%")
    print(f"Prezzo dopo sconto: {prezzo_scontato:.2f} €")
    print(f"IVA: {iva}%")
    print(f"Totale finale: {prezzo_finale:.2f} €")

# Chiamata delle funzioni
stampa_riepilogo("Tastiera meccanica", 89.90, 15, 22)

# Esempio di uso diretto del valore restituito
prezzo_base = 120
prezzo_con_sconto = calcola_sconto(prezzo_base, 10)
prezzo_con_iva = calcola_totale_con_iva(prezzo_con_sconto, 22)

print("nCalcolo separato:")
print(f"Prezzo base: {prezzo_base:.2f} €")
print(f"Dopo sconto: {prezzo_con_sconto:.2f} €")
print(f"Dopo IVA: {prezzo_con_iva:.2f} €")

Spiegazione

In Python, definire una funzione significa scrivere il blocco di codice che descrive cosa deve fare. La definizione inizia con la parola chiave def, seguita dal nome della funzione, dalle parentesi tonde e dai due punti.

Nel codice sopra abbiamo definito tre funzioni:

  • calcola_sconto(prezzo, percentuale_sconto): riceve un prezzo e una percentuale, poi restituisce il prezzo scontato.
  • calcola_totale_con_iva(prezzo, aliquota_iva): riceve un prezzo e calcola il totale con IVA.
  • stampa_riepilogo(nome_prodotto, prezzo, sconto, iva): usa le prime due funzioni per produrre un riepilogo completo.

Chiamare una funzione significa eseguirla, scrivendo il suo nome seguito dalle parentesi e dagli eventuali argomenti. Ad esempio:

stampa_riepilogo("Tastiera meccanica", 89.90, 15, 22)

Questa riga non definisce nulla: esegue la funzione, passando i valori richiesti.

Un punto chiave è il return. Quando una funzione restituisce un valore, quel risultato può essere assegnato a una variabile o usato in un’altra espressione. Per esempio:

prezzo_con_sconto = calcola_sconto(prezzo_base, 10)

Qui il valore restituito da calcola_sconto viene salvato in prezzo_con_sconto. Questo è molto diverso dal semplice stampare un valore con print(): print mostra, mentre return consegna il risultato al resto del programma.

Notiamo anche che la funzione stampa_riepilogo non restituisce nulla: si occupa solo di visualizzare informazioni. Questo è un esempio utile di separazione dei compiti:

  • funzioni che calcolano un risultato;
  • funzioni che mostrano il risultato;
  • funzioni che combinano più operazioni.

Dal punto di vista pratico, questa organizzazione rende il codice più facile da testare e da riutilizzare. Se in futuro cambia la formula dello sconto, basterà modificare una sola funzione.

Best practice

  • Dai nomi chiari alle funzioni: un nome come calcola_totale_con_iva è più leggibile di calc o f.
  • Fai una sola cosa per funzione: una funzione piccola e focalizzata è più semplice da mantenere.
  • Usa return per i risultati: se il dato serve ad altri calcoli, non affidarti solo a print().
  • Evita effetti collaterali inutili: una funzione di calcolo dovrebbe calcolare, non stampare.
  • Documenta il comportamento con una docstring breve, soprattutto se la funzione verrà riutilizzata.
  • Chiama le funzioni nel punto giusto: definire una funzione non la esegue automaticamente.

Un errore frequente è dimenticare che il codice dentro una funzione resta inattivo finché la funzione non viene chiamata. Questo capita spesso ai principianti quando scrivono una funzione corretta ma non vedono alcun output. In quel caso il problema non è la definizione, ma la chiamata mancante.

Un altro errore comune è scrivere una funzione che calcola un valore e poi dimenticare di usare il risultato restituito. Ad esempio:

calcola_sconto(100, 10)
print("Operazione completata")

Qui il calcolo viene eseguito, ma il risultato viene perso perché non è stato assegnato a una variabile né stampato né passato ad altre funzioni.

Riepilogo

  • Definire una funzione significa scrivere il suo comportamento con def.
  • Chiamare una funzione significa eseguirla usando il suo nome e le parentesi.
  • return serve a restituire un valore utile al resto del programma.
  • Le funzioni permettono di separare calcolo, stampa e orchestrazione della logica.
  • Un buon design delle funzioni migliora leggibilità, riuso e manutenzione del codice.

Se impari a distinguere bene tra definizione, chiamata e ritorno, avrai una base solida per scrivere programmi Python più puliti e professionali.

Approfondisci con risorse ufficiali

SHARE