Utiliser des arguments par mots clés en Python

Effectué

Les arguments facultatifs nécessitent l’affectation d’une valeur par défaut. Ces arguments nommés sont appelés arguments par mots clés. Les valeurs d’arguments par mots clés doivent être définies dans les fonctions elles-mêmes. Quand vous appelez une fonction définie avec des arguments par mots clés, il n’est pas nécessaire de tous les utiliser.

La mission Apollo 11 a mis environ 51 heures pour se rendre sur la Lune. Créons une fonction qui retourne l’heure d’arrivée estimée en utilisant la même valeur que celle de la mission Apollo 11 par défaut :

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 fonction utilise le module datetime pour définir l’heure actuelle. Elle utilise timedelta pour autoriser l’opérateur d’addition qui entraîne la création d’un objet de temps. Une fois ce résultat calculé, elle retourne l’estimation arrival sous la forme d’une chaîne. Essayez de l’appeler sans aucun argument :

arrival_time()
Arrival: Saturday 16:42

Même si la fonction définit un argument par mot clé, elle vous permet de ne pas en passer quand vous appelez une fonction. Dans le cas présent, la variable hours a la valeur par défaut 51. Pour vérifier que la date actuelle est correcte, utilisez 0 en tant que valeur de hours :

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

Mélange d’arguments et d’arguments par mots clés

Parfois, une fonction a besoin d’une combinaison d’arguments et d’arguments par mots clés. En Python, cette combinaison suit un ordre spécifique. Les arguments sont toujours déclarés en premier, suivis des arguments par mots clés.

Mettez à jour la fonction arrival_time() pour accepter un argument obligatoire, qui est le nom de la destination :

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")

Dans la mesure où vous avez ajouté un argument obligatoire, il n’est plus possible d’appeler la fonction sans arguments :

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

Utilisez "Moon" en tant que valeur de destination pour éviter l’erreur :

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

Vous pouvez également passer plus de deux valeurs, mais vous devez les séparer par une virgule. Environ 8 minutes (0,13 heure) sont nécessaires pour se rendre en orbite, vous devez donc utiliser cette valeur en tant qu’argument :

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