2.14. Définir des fonctions¶
Une fonction regroupe un bloc de code sous un nom afin qu’il puisse être appelé depuis de nombreux endroits. Partout où un calcul, une action ou un travail bien défini apparaît plus d’une fois, une fonction en fait une seule chose nommée.
Le mot-clé est def :
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
Sortie
hello, Alice
hello, Bob
La ligne commençant par def est la définition – elle crée la fonction mais n’exécute pas le corps. C’est l’appel greet("Alice") qui exécute le bloc indenté.
2.14.1. Paramètres et arguments¶
Les noms entre parenthèses sur la ligne def sont des paramètres – des emplacements réservés pour les valeurs que l’appelant fournira. Les valeurs effectivement passées sont les arguments. Une fonction peut prendre zéro paramètre ou plus :
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
Un appel avec un nombre incorrect d’arguments lève immédiatement TypeError.
2.14.2. return¶
Une instruction return termine la fonction immédiatement et renvoie une valeur à l’appelant :
def absolute(x):
if x < 0:
return -x
return x
Une fonction qui n’atteint jamais de return (ou qui a un return nu sans valeur) renvoie None :
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
Une fonction peut comporter plusieurs instructions return ; la première atteinte l’emporte, et le reste du corps est ignoré.
2.14.2.1. Renvoyer plusieurs valeurs¶
Python renvoie un seul objet par appel, mais cet objet peut être un tuple – et l’appelant peut le déballer sur place :
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
Les parenthèses autour de la valeur de retour sont facultatives ; return a, b et return (a, b) sont identiques.
2.14.3. Docstrings¶
Un littéral de chaîne placé comme première instruction du corps d’une fonction est une docstring. Elle est stockée sur l’objet fonction et c’est ce que help() affiche :
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
L’IDE affiche les docstrings dans les info-bulles lorsque le curseur survole le nom de la fonction, donc même un résumé d’une seule ligne est rentable. Les chaînes entre triples guillemets permettent à la docstring de s’étendre sur plusieurs lignes lorsque davantage de détails sont utiles.
2.14.4. Conventions de nommage¶
Les noms de fonctions utilisent le snake_case – des mots en minuscules séparés par des traits de soulignement. Le nom doit décrire ce que fait la fonction :
Bien :
read_temperature,parse_header,is_valid.À éviter :
do_stuff,handle1,temp_func.
Un trait de soulignement initial (_helper) marque une fonction comme interne à son module. La convention est largement respectée mais n’est pas imposée par Python.