Usare argomenti di parole chiave in Python

Completato

Gli argomenti facoltativi richiedono l'assegnazione di un valore predefinito. Questi argomenti denominati sono definiti argomenti di parole chiave. I valori degli argomenti di parole chiave devono essere definiti nelle funzioni stesse. Quando si chiama una funzione definita con gli argomenti di parole chiave, non è necessario usarli.

La missione Apollo 11 ha impiegato circa 51 ore per arrivare sulla Luna. Verrà creata una funzione che restituisce l'ora di arrivo stimata usando lo stesso valore della missione Apollo 11 come valore predefinito:

from datetime import timedelta, datetime

def arrival_time(hours=51):
    now = datetime.now()
    arrival = now + timedelta(hours=hours)
    return arrival.strftime("Arrival: %A %H:%M")

La funzione usa il modulo datetime per definire l'ora corrente. Viene usato timedelta per consentire l'operazione di aggiunta che restituisce un nuovo oggetto tempo. Dopo aver calcolato tale risultato, restituisce la stima arrival formattata come stringa. Provare a chiamarla senza argomenti:

arrival_time()
Arrival: Saturday 16:42

Anche se la funzione definisce un argomento di parola chiave, consente di non passarne uno quando si chiama una funzione. In questo caso, la variabile hours viene impostata su 51. Per verificare che la data corrente sia corretta, usare 0 come valore per hours:

arrival_time(hours=0)
Arrival: Thursday 13:42

Combinazione di argomenti e argomenti di parole chiave

A volte, una funzione richiede una combinazione di argomenti e argomenti di parole chiave. In Python questa combinazione segue un ordine specifico. Gli argomenti vengono sempre dichiarati per primi, seguiti dagli argomenti di parole chiave.

Aggiornare la funzione arrival_time() per accettare un argomento obbligatorio, ovvero il nome della destinazione:

from datetime import timedelta, datetime

def arrival_time(destination, hours=51):
    now = datetime.now()
    arrival = now + timedelta(hours=hours)
    return arrival.strftime(f"{destination} Arrival: %A %H:%M")

Poiché è stato aggiunto un argomento obbligatorio, non è più possibile chiamare la funzione senza argomenti:

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

Usare "Moon" come valore per destination per evitare l'errore:

arrival_time("Moon")
Moon Arrival: Saturday 16:54

È anche possibile passare più di due valori, ma è necessario separarli con una virgola. Ci vogliono circa 8 minuti (0,13 ore) per arrivare all'orbita, per cui si può usare questo valore come argomento:

arrival_time("Orbit", hours=0.13)
Orbit Arrival: Thursday 14:11