Utiliser des arguments de fonction en Python

Effectué

Une fois que vous savez créer une fonction sans entrée, l’étape suivante consiste à créer des fonctions qui nécessitent un argument. L’utilisation d’arguments rend les fonctions plus flexibles, car vous pouvez leur faire effectuer davantage d’opérations et conditionner leurs actions.

Argument obligatoire

Si vous pilotez une fusée, une fonction sans entrée obligatoire est comme un ordinateur avec un bouton pour vous indiquer l’heure. Si vous appuyez sur le bouton, une voix synthétique vous indique l’heure. Toutefois, la destination peut être une entrée obligatoire pour le calcul de la distance de voyage. Les entrées obligatoires sont appelées les arguments de la fonction.

Pour imposer un argument, mettez-le entre parenthèses :

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

Essayez d’appeler la fonction distance_from_earth() sans arguments :

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 lève une exception TypeError en l’accompagnant d’un message d’erreur qui indique que la fonction nécessite un argument nommé destination. Si l’ordinateur de la fusée doit calculer la distance à parcourir pour arriver à destination, il doit indiquer que la destination est obligatoire. L’exemple de code comporte deux chemins pour une réponse, un pour la Lune et un autre pour une destination quelconque. Utilisez la Lune en tant qu’entrée pour obtenir une réponse :

distance_from_earth("Moon")
238,855

Dans la mesure où il existe une condition attrape-tout, essayez d’utiliser une autre chaîne en tant que destination pour vérifier ce comportement :

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

Plusieurs arguments obligatoires

Pour utiliser plusieurs arguments, vous devez les séparer par une virgule. Créons une fonction qui peut calculer le nombre de jours nécessaires pour atteindre une destination, en fonction d’une distance donnée et d’une vitesse constante :

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

À présent, utilisez la distance entre la Terre et la Lune pour calculer le nombre de jours nécessaires afin d’atteindre la Lune à une vitesse fixée à 120 km/h :

days_to_complete(238855, 75)
132.69722222222222

Fonctions en tant qu’arguments

Vous pouvez utiliser la valeur de la fonction days_to_complete() et l’affecter à une variable, puis la passer à round() (une fonction intégrée qui arrondit au nombre entier le plus proche) pour obtenir un nombre entier :

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

Toutefois, un modèle utile consiste à passer des fonctions à d’autres fonctions au lieu d’affecter la valeur retournée :

round(days_to_complete(238855, 75))
133

Conseil

Bien que le passage de fonctions directement à d’autres fonctions en tant qu’entrée soit utile, cela risque de nuire à la lisibilité. Ce modèle est particulièrement problématique quand les fonctions nécessitent de nombreux arguments.