Corso Python / Funzioni: parametri, argomenti e valori restituiti

Una funzione dà un nome a un’operazione, riceve dati tramite parametri e restituisce un risultato con return. Restituire un valore è diverso da stamparlo: separando calcolo e visualizzazione puoi riusare lo stesso risultato in altre operazioni.

Distinguere parametri, argomenti e valore restituito

La parola def introduce il nome della funzione e i parametri tra parentesi; dopo il due punti segue il corpo rientrato. I parametri sono i nomi della definizione, mentre gli argomenti sono i valori forniti durante una chiamata. Definire la funzione non esegue il suo corpo: occorre chiamarla.

return termina la chiamata corrente e consegna un valore al chiamante. Un return senza espressione, oppure il raggiungimento della fine del corpo senza return, restituisce None. La guida ufficiale alla definizione delle funzioni descrive questi comportamenti.

Se una funzione di calcolo stampa soltanto, il chiamante non riceve automaticamente quel numero come risultato. Restituisci il valore calcolato e lascia al chiamante la scelta di mostrarlo, combinarlo con altri risultati o verificarlo.

Eseguire una funzione e riusarne i risultati

Salva il programma completo in UTF-8 come functions.py, dentro una cartella di esercitazione. Esegui python functions.py con l’interprete del progetto selezionato. Su macOS o Ubuntu fuori dall’ambiente virtuale usa python3 se è il comando dell’interprete scelto. Non servono pacchetti esterni.

def total_with_fee(amount, fee):
    """Return the sum of the amount and fee."""
    return amount + fee

first = total_with_fee(8000, 500)
second = total_with_fee(3500, 0)
print(first, second)
print(first + second)

Il risultato atteso è:

8500 3500
12000

Nel primo richiamo, amount riceve 8000 e fee riceve 500: il risultato 8500 viene assegnato a first. Nel secondo, 3500 e 0 producono 3500, assegnato a second. La prima stampa mostra entrambi i risultati; la seconda li somma, ottenendo 12000. Il return non stampa nessuna riga da solo.

La stringa tra triple virgolette è la docstring, la documentazione della funzione. Nell’esempio significa «Restituisce la somma dell’importo e della commissione». Non è un controllo eseguito sugli argomenti: documenta l’operazione ma non impone automaticamente un tipo o un limite ai valori.

Definire responsabilità e condizioni d’uso

La funzione dell’esempio assume valori numerici compatibili con l’addizione. Non controlla se siano interi, se siano espressi nella stessa unità o se gli importi negativi siano ammessi. Queste regole vanno definite nel contratto dei dati e controllate nel punto appropriato. Per esempio, due stringhe possono essere concatenate da + senza produrre una somma numerica: il nome della funzione non impedisce da solo un uso scorretto.

Scegli un nome che descriva il compito e non concentrare nella stessa funzione lettura dell’input, calcolo e salvataggio se devono essere riusati separatamente. Una docstring utile descrive risultato, premesse ed eventuali errori pertinenti senza promettere verifiche che il codice non svolge.

Istruzione Risultato Effetto di visualizzazione
return total Restituisce total e termina la chiamata. Non stampa il valore.
print(total) La chiamata a print restituisce None. Scrive il valore nell’output.

Una funzione può sia stampare sia restituire, ma sono due comportamenti distinti. Per l’esempio mantieni il calcolo nel return e le stampe all’esterno: così il risultato rimane disponibile per la seconda addizione.

Riconoscere errori di chiamata e risultati mancanti

  1. Cambia solo la commissione della prima chiamata da 500 a 1000. La prima riga diventa 9000 3500 e la somma finale 12500.
  2. Temporaneamente sostituisci return amount + fee con print(amount + fee). Le due chiamate stampano i rispettivi totali, ma first e second diventano None; l’addizione finale genera TypeError.
  3. Ripristina return e prova una chiamata prima che venga eseguita la definizione, in un nuovo script o processo: il nome non è ancora disponibile e compare NameError.
  4. Ripristina il file originale e verifica di nuovo 8500, 3500 e la somma 12000.

Un numero insufficiente di argomenti genera TypeError: confronta i parametri della definizione con i valori passati alla chiamata. Le variabili locali create nella funzione non sono normalmente accessibili direttamente fuori dalla chiamata; restituisci i dati necessari anziché dipendere da uno stato esterno nascosto.

Se un percorso termina senza restituire il valore atteso, controlla ogni ramo, come nella guida su assegnazioni e percorsi condizionali. L’assenza di un’eccezione dentro la funzione non garantisce che il chiamante abbia ricevuto il risultato utile.