Usare gli argomenti delle funzioni in Python
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.