6. Les fonctions

Python prend en charge un large éventail de styles de programmation, notamment procédural (impératif), orienté objet et fonctionnel. Bien que la programmation orientée objet et la programmation fonctionnelle soient de puissants paradigmes de programmation, en particulier dans les logiciels volumineux et complexes, la procédure est souvent à la fois plus facile à comprendre et à représenter directement une formule mathématique. L’idée de base de la programmation procédurale est de produire une fonction ou un ensemble de fonctions (génériquement) de la forme

$$y = f(x)$$

Les fonctions prennent une ou plusieurs entrées et produisent une ou plusieurs sorties. Les fonctions Python sont très simples à déclarer et peuvent se trouver dans le même fichier que le programme principal ou dans un programme standard. Les fonctions sont déclarées à l’aide du mot clé def et la valeur produite est renvoyée à l’aide du mot clé return. Considérons une fonction simple qui renvoie le carré de l’entrée, $y = x^2$.

Un autre exemple

La fonction peut également être définie à l'aide de tableaux et de matrices NumPy.

Lorsque plusieurs sorties sont renvoyées mais qu'une seule variable est disponible pour l'affectation, toutes les sorties sont renvoyées dans un tuple. Alternativement, les sorties peuvent être directement affectées lorsque la fonction est appelée avec le même nombre de variables que les sorties.

6.1 Arguments mots clés et valeurs par défaut

Toutes les variables d'entrée dans les fonctions sont automatiquement des arguments mot-clés. On peut ainsi accéder à la fonction en plaçant les entrées dans l'ordre dans lequel elles apparaissent dans la fonction ou en appelant l'entrée par leur nom à l'aide de mot-clé = valeur.

Comme les noms de variable sont automatiquement des mots-clés, il est important d'utiliser des noms de variable significatifs lorsque cela est possible, plutôt que des variables génériques telles que $a, b, c$ ou $x, y$ et $z$. Dans certains cas, $x$ peut être raisonnable, mais dans l'exemple précédent qui calculait la norme $L_p$, appeler la troisième entrée $z$ serait une mauvaise idée.

6.1.1 Valeurs par défaut

Les valeurs par défaut sont définies dans la déclaration de fonction à l'aide de la syntaxe input = default.

Quelques bonnes pratiques

Chaque appel à bad_function indique que $x$ a une valeur différente bien que la valeur par défaut soit $0$. La solution à ce problème consiste à initialiser les objets mutables sur None, puis à utiliser un if pour vérifier et initialiser uniquement si la valeur est None. Noter que les tests pour None utilisent le mot-clé is plutôt que le test d'égalité avec ==.

6.1.2 Un nombre variable d'entrées

En utilisant *args

En utilisant **kwargs

6.2 La chaîne de documentation

La chaîne de caractères de documentation est l'un des éléments les plus importants de toute fonction - en particulier une fonction écrite pour être utilisée par d'autres. La chaîne de documentation est une chaîne spéciale, entourée de guillemets triples, soit ''', soit """, disponible à l'aide de help(). Lorsque help(fun) est appelé (ou fun?/?fun dans IPython), Python cherche la chaîne de caractères de documentation qui est placée juste en dessous de la définition de la fonction.

Cette chaîne de caractère de documentation n'est pas un bon exemple. Je suggère de suivre les instructions de NumPy, actuellement disponibles dans le référentiel source de NumPy(ou de rechercher numpy docstring). Voir aussi [NumPy example.py] (https://github.com/numpy/numpy/blob/master/doc/example.py) Celles-ci diffèrent des directives Python docstring guidelines et sont plus spécialisées que celles-ci, et sont plus appropriées pour le code numérique. Une meilleure chaîne de caractères de documentation pour lp_norm serait: