6.4 Paramètres
Objectifs d'apprentissage
À la fin de cette section, vous devriez être capable de :
- Identifier les arguments et les paramètres d'une fonction.
- Décrire comment la mutabilité influe sur la façon dont une fonction peut modifier des arguments.
Arguments et paramètres
Que faire si un programmeur souhaite écrire une fonction qui affiche le contenu d'une liste ? Une bonne pratique consiste à passer directement les valeurs à une fonction plutôt que de dépendre de variables globales. Un argument de fonction est une valeur transmise en entrée lors de l'appel d'une fonction. Un paramètre (parameter) de fonction est une variable représentant l'entrée dans la définition de la fonction. Remarque : les termes « argument » et « paramètre » sont parfois utilisés de manière interchangeable dans les conversations et la documentation.
Concepts en pratique
Arguments et paramètres
Considérez ce qui suit :
1 | def print_welcome(name): |
2 | print(f"Welcome {name}!") |
3 | |
4 | username = int(input("Enter new username: ")) |
5 | print_welcome(username) |
Arguments et paramètres multiples
Les fonctions peuvent avoir plusieurs paramètres. Ex. : une fonction utilise deux paramètres, la longueur et la largeur, pour calculer la superficie d'une pièce. Les appels de fonction doivent utiliser l'ordre et le nombre corrects d'arguments pour éviter des comportements indésirables et des erreurs (sauf en cas d'utilisation d'arguments optionnels ou nommés, comme nous le verrons plus loin).
Exemple 6.1
Utilisation de plusieurs arguments dans un appel de fonction
def print_div(op_1, op_2):
""" Prints division operation """
print(f"{op_1}/{op_2} = {op_1/op_2}")
num_1 = 6
num_2 = 3
print_div(num_1, num_2) # Prints "6/3 = 2.0"
print_div(num_2, num_1) # Prints "3/6 = 0.5"
print_div(num_1) # Error: Missing argument: op_2
Concepts en pratique
Arguments et paramètres multiples
Considérez ce qui suit :
def calc_distance(x1, y1, x2, y2):
dist = math.sqrt((x2-x1)**2 + (y2-y1)**2)
print(dist)
p1_x =int(input("Enter point 1's x: "))
p1_y =int(input("Enter point 1's y: "))
p2_x =int(input("Enter point 2's x: "))
p2_y =int(input("Enter point 2's y: "))
calc_distance(p1_x, p1_y, p2_x, p2_y)
Modification des arguments et mutabilité
En Python, une variable est un nom qui fait référence à un objet stocké en mémoire, c'est-à-dire une référence d'objet ; Python utilise donc un système de passage par référence d'objet (pass-by-object-reference). Si un argument est modifié dans une fonction, les modifications sont conservées ou perdues selon la mutabilité de l'objet. Un objet mutable peut être modifié après sa création. Les modifications apportées par une fonction à l'objet apparaissent alors en dehors de la fonction. Un objet immuable (immutable) ne peut pas être modifié après sa création. Une fonction doit donc en faire une copie locale pour le modifier, et les modifications apportées à cette copie locale n'apparaissent pas en dehors de la fonction.
Les programmeurs doivent faire preuve de prudence lorsqu'ils modifient les arguments d'une fonction, car ces effets de bord peuvent rendre les programmes difficiles à déboguer et à maintenir.
Exemple 6.2
Conversion de températures
Quelles sont les valeurs de weekend_temps et type une fois que convert_temps() s'est terminée ?
def convert_temps(temps, unit):
if unit == "F":
for i in range(len(temps)):
temps[i] = (temps[i]-32) * 5/9
unit = "C"
else:
for i in range(len(temps)):
temps[i] = (temps[i]*9/5) + 32
unit = "F"
# Weekend temperatures in Fahrenheit.
wknd_temps = [49.0, 51.0, 44.0]
deg_sign = u"\N{DEGREE SIGN}" # Unicode
metric = "F"
# Convert from Fahrenheit to Celsius.
convert_temps(wknd_temps, metric)
for temp in wknd_temps:
print(f"{temp:.2f}{deg_sign}{metric}", end=" ")
La sortie est 9.44°F 10.56°F 6.67°F. type a été modifié en "C" dans la fonction, mais n'a pas conservé cette modification en dehors de la fonction. Pourquoi la modification de l'argument de type liste est-elle conservée et non celle de l'argument de type chaîne ? (Indice : une liste est mutable. Une chaîne de caractères est immuable.)
Concepts en pratique
Mutabilité et arguments de fonction
À vous d'essayer
Affichage de l'aire d'un triangle rectangle
Écrivez une fonction, print_area(), qui prend en paramètres la base et la hauteur d'un triangle rectangle et affiche l'aire de ce triangle. L'aire d'un triangle rectangle est , où b représente la base et h la hauteur.
Pour les entrées suivantes :
3
4
La sortie est :
Triangle area: 6.0
À vous d'essayer
Ajustement des notes
Écrivez une fonction, print_scores(), qui prend en entrée une liste de notes d'examen et un nombre représentant les points à ajouter. Pour chaque note, affichez la note originale et la somme de la note et du bonus. Veillez à ne pas modifier la liste.
Pour l'appel de fonction suivant :
print_scores([67, 68, 72, 71, 69], 10)
La sortie est :
67 would be updated to 77
68 would be updated to 78
72 would be updated to 82
71 would be updated to 81
69 would be updated to 79