Usare gli argomenti delle funzioni in Python

Completato

Ora che si è appreso come creare una funzione senza input, il passaggio successivo consiste nel creare funzioni che richiedono un argomento. L'uso degli argomenti rende le funzioni più flessibili, perché possono eseguire più operazioni e condizionare le operazioni eseguite.

Richiesta di un argomento

Se si sta pilotando un'astronave, una funzione senza input obbligatori è come un computer con un pulsante per indicare l'ora. Se si preme il pulsante, una voce computerizzata dice l'ora. Ma un input obbligatorio può essere una destinazione per calcolare la distanza da percorrere. Gli input obbligatori vengono chiamati argomenti della funzione.

Per richiedere un argomento, inserirlo tra parentesi:

def distance_from_earth(destination):
    if destination == "Moon":
        return "238,855"
    else:
        return "Unable to compute to that destination"

Provare a chiamare la funzione distance_from_earth() senza argomenti:

distance_from_earth()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: distance_from_earth() missing 1 required positional argument: 'destination'

Python genera TypeError con un messaggio di errore che indica che la funzione richiede un argomento denominato destination. Se al computer dell'astronave viene chiesto di calcolare la distanza da percorrere con una destinazione, la destinazione verrà richiesta come requisito. Il codice di esempio ha due percorsi per una risposta, uno per la Luna e l'altro per qualsiasi altra cosa. Usare la Luna come input per ottenere una risposta:

distance_from_earth("Moon")
238,855

Poiché esiste una condizione catch-all, provare a usare qualsiasi altra stringa come destinazione per verificare tale comportamento:

distance_from_earth("Saturn")
Unable to compute to that destination

Più argomenti obbligatori

Per usare più argomenti, è necessario separarli con una virgola. Viene ora creata una funzione in grado di calcolare il numero di giorni necessari per raggiungere una destinazione, data la distanza e una velocità costante:

def days_to_complete(distance, speed):
    hours = distance/speed
    return hours/24

Usare ora la distanza dalla Terra alla Luna per calcolare il numero di giorni necessari per arrivare sulla Luna con un limite di velocità di 75 miglia all'ora:

days_to_complete(238855, 75)
132.69722222222222

Funzioni come argomenti

È possibile usare il valore della funzione days_to_complete() e assegnarlo a una variabile, quindi passarlo a round() (una funzione predefinita che arrotonda al numero intero più vicino) per ottenere un numero intero:

total_days = days_to_complete(238855, 75)
round(total_days)
133

Tuttavia, un modello utile consiste nel passare le funzioni ad altre funzioni anziché assegnare il valore restituito:

round(days_to_complete(238855, 75))
133

Suggerimento

Anche se il passaggio di funzioni direttamente ad altre funzioni come input è utile, è possibile che la leggibilità sia ridotta. Questo modello è particolarmente problematico quando le funzioni richiedono molti argomenti.