Python: definire e chiamare funzioni con parametri obbligatori e facoltativi

by theArchitect
SHARE
Python: definire e chiamare funzioni con parametri obbligatori e facoltativi
© Guida-HTML5.it

Introduzione

Le funzioni sono uno degli strumenti più importanti in Python perché permettono di organizzare il codice in blocchi riutilizzabili, leggibili e più facili da testare. Quando si parla di definizione e chiamata di una funzione, spesso ci si concentra solo sulla sintassi base. In realtà, un aspetto molto pratico e utile è saper progettare bene i parametri: alcuni possono essere obbligatori, altri facoltativi.

Questo sotto-argomento è particolarmente importante perché aiuta a scrivere funzioni flessibili senza renderle confuse. In un progetto reale, ad esempio, potresti voler creare una funzione che genera un report, formatta un testo o calcola un prezzo finale. In questi casi è utile decidere quali informazioni sono indispensabili e quali, invece, possono avere un valore di default.

In questo tutorial vedremo come definire e chiamare funzioni con parametri obbligatori e facoltativi, come evitare errori comuni e come progettare API interne più pulite e sicure.

Codice completo

def crea_scontrino(nome_prodotto, prezzo, sconto=0, valuta="EUR"):
    """
    Restituisce una stringa formattata con i dati di uno scontrino semplice.

    Parametri:
    - nome_prodotto: obbligatorio
    - prezzo: obbligatorio
    - sconto: facoltativo, percentuale di sconto da applicare
    - valuta: facoltativo, simbolo o codice valuta
    """
    prezzo_scontato = prezzo - (prezzo * sconto / 100)

    return (
        f"Prodotto: {nome_prodotto}n"
        f"Prezzo iniziale: {prezzo:.2f} {valuta}n"
        f"Sconto: {sconto}%n"
        f"Prezzo finale: {prezzo_scontato:.2f} {valuta}"
    )


def invia_notifica(messaggio, destinatario, priorita="normale"):
    """
    Simula l´invio di una notifica con priorità opzionale.
    """
    return f"Notifica inviata a {destinatario} | Priorità: {priorita} | Messaggio: {messaggio}"


def calcola_media(voti):
    """
    Calcola la media di una lista di voti.
    Se la lista è vuota, solleva un errore chiaro.
    """
    if not voti:
        raise ValueError("La lista dei voti non può essere vuota.")

    return sum(voti) / len(voti)


# Chiamate della funzione con diversi tipi di parametri
scontrino1 = crea_scontrino("Mouse wireless", 29.90)
scontrino2 = crea_scontrino("Tastiera meccanica", 89.99, sconto=10)
scontrino3 = crea_scontrino("Monitor 27 pollici", 249.50, sconto=15, valuta="€")

notifica1 = invia_notifica("Backup completato", "[email protected]")
notifica2 = invia_notifica("Spazio disco quasi esaurito", "[email protected]", priorita="alta")

media_studenti = calcola_media([28, 30, 27, 29])

print(scontrino1)
print()
print(scontrino2)
print()
print(scontrino3)
print()
print(notifica1)
print(notifica2)
print()
print(f"Media voti: {media_studenti:.2f}")

Spiegazione

Vediamo il codice passo per passo. La funzione crea_scontrino mostra bene la differenza tra parametri obbligatori e facoltativi:

  • nome_prodotto e prezzo sono obbligatori, quindi devono essere sempre forniti quando si chiama la funzione.
  • sconto=0 è facoltativo: se non lo passi, Python usa il valore predefinito 0.
  • valuta="EUR" è anch’esso facoltativo e serve a rendere l’output più flessibile.

Quando chiami crea_scontrino("Mouse wireless", 29.90), Python associa solo i parametri obbligatori e usa i valori di default per gli altri. Questa è una chiamata molto comoda perché ti evita di ripetere argomenti inutili.

Nel caso di crea_scontrino("Tastiera meccanica", 89.99, sconto=10), stai sovrascrivendo solo il parametro facoltativo sconto. Usare il nome del parametro nella chiamata rende il codice più leggibile, soprattutto quando una funzione ha diversi argomenti opzionali.

La terza chiamata, crea_scontrino("Monitor 27 pollici", 249.50, sconto=15, valuta="€"), mostra come si possano impostare più parametri facoltativi contemporaneamente. Questo approccio è molto utile in funzioni di formattazione, reportistica o gestione configurazioni.

La funzione invia_notifica segue la stessa logica. Il parametro priorita ha valore predefinito "normale", ma può essere modificato quando serve. In questo modo la funzione resta semplice per l’uso comune e allo stesso tempo abbastanza flessibile per casi più avanzati.

La funzione calcola_media introduce invece una buona pratica fondamentale: controllare gli input. Se la lista è vuota, la funzione genera un ValueError con un messaggio chiaro. Questo evita errori meno comprensibili, come una divisione per zero. Anche se il tema principale è la definizione e chiamata delle funzioni, progettare bene il comportamento in caso di dati mancanti è parte integrante di una funzione robusta.

Un dettaglio importante: i parametri con valore predefinito devono essere posizionati dopo quelli obbligatori. Questa regola aiuta Python a capire in modo univoco come associare gli argomenti passati nella chiamata.

Best practice

  • Metti prima i parametri obbligatori e poi quelli facoltativi con valore di default.
  • Usa nomi descrittivi per i parametri: rendono la funzione più comprensibile.
  • Preferisci argomenti nominati quando una funzione ha più parametri opzionali: riducono gli errori di lettura.
  • Non usare valori predefiniti mutabili come liste o dizionari, a meno che tu non sappia esattamente perché lo stai facendo.
  • Valida sempre gli input importanti: una funzione ben progettata deve fallire in modo chiaro, non silenzioso.
  • Scrivi una docstring quando la funzione non è banale: aiuta te e gli altri a capire subito come usarla.

Una pratica molto utile è pensare alla funzione come a una piccola interfaccia: quali dati sono davvero necessari? Quali possono avere un comportamento standard? Questa domanda ti aiuta a progettare funzioni più pulite e facili da mantenere.

Riepilogo

In questo tutorial abbiamo visto come definire e chiamare funzioni in Python distinguendo tra parametri obbligatori e parametri facoltativi. Questo approccio rende il codice più espressivo e più semplice da usare in contesti reali.

  • I parametri obbligatori devono essere sempre passati nella chiamata.
  • I parametri facoltativi hanno un valore di default e possono essere omessi.
  • Usare argomenti nominati migliora la leggibilità.
  • Controllare gli input rende le funzioni più sicure e affidabili.

Se impari a progettare bene la firma di una funzione, scriverai codice più chiaro, riutilizzabile e professionale.

Approfondisci con risorse ufficiali

  • Documentazione Python sulle funzioni: https://docs.python.org/3/tutorial/controlflow.html#defining-functions
  • Python Standard Library: https://docs.python.org/3/library/
  • PEP 8 - Style Guide for Python Code: https://peps.python.org/pep-0008/
  • Python Tutorial ufficiale: https://docs.python.org/3/tutorial/

SHARE