
À la découverte des modules
Jusqu'ici, nous avons travaillé avec les fonctions de Python chargées au lancement de l'interpréteur. Il y en a déjà un certain nombre et nous pourrions continuer et finir cette première partie sans utiliser de module Python ou presque. Mais il faut bien qu'à un moment, je vous montre cette possibilité des plus intéressantes !
Les modules, qu'est-ce que c'est ?
Un module est grossièrement un bout de code que l'on a enfermé dans un fichier. On emprisonne ainsi des fonctions et des variables ayant toutes un rapport entre elles. Ainsi, si l'on veut travailler avec les fonctionnalités prévues par le module (celles qui ont été enfermées dans le module), il n'y a qu'à importer le module et utiliser ensuite toutes les fonctions et variables prévues.
Il existe un grand nombre de modules disponibles avec Python sans qu'il soit nécessaire d'installer des bibliothèques supplémentaires. Pour cette partie, nous prendrons l'exemple du module math qui contient, comme son nom l'indique, des fonctions mathématiques. Inutile de vous inquiéter, nous n'allons pas nous attarder sur le module lui-même pour coder une calculatrice scientifique, nous verrons surtout les différentes méthodes d'importation.
La méthode import
Lorsque vous ouvrez l'interpréteur Python, les fonctionnalités du module math ne sont pas incluses. Il s'agit en effet d'un module, il vous appartient de l'importer si vous vous dites « tiens, mon programme risque d'avoir besoin de fonctions mathématiques ». Nous allons voir une première syntaxe d'importation.
>>> import math
La syntaxe est facile à retenir : le mot-clé import, qui signifie « importer » en anglais, suivi du nom du module, ici math.
Après l'exécution de cette instruction, rien ne se passe en apparence. En réalité, Python vient d'importer le module math. Toutes les fonctions mathématiques contenues dans ce module sont maintenant accessibles. Pour appeler une fonction du module, il faut taper le nom du module suivi d'un point « . » puis du nom de la fonction. C'est la même syntaxe pour appeler des variables du module. Voyons un exemple :
>>> math.sqrt(16)
4
Comme vous le voyez, la fonction sqrt du module math renvoie la racine carrée du nombre passé en paramètre.
Dans votre tête : Mais comment suis-je censé savoir quelles fonctions existent et ce que fait math.sqrt dans ce cas précis ?
J'aurais dû vous montrer cette fonction bien plus tôt car, oui, c'est une fonction qui va nous donner la solution. Il s'agit de help, qui prend en argument la fonction ou le module sur lequel vous demandez de l'aide. L'aide est fournie en anglais mais c'est de l'anglais technique, c'est-à-dire une forme de l'anglais que vous devrez maîtriser pour programmer, si ce n'est pas déjà le cas. Une grande majorité de la documentation est en anglais, bien que vous puissiez maintenant en trouver une bonne part en français.
>>> help("math")
Help on built-in module math:
NAME
math
FILE
(built-in)
DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard.
FUNCTIONS
acos(...)
acos(x)
Return the arc cosine (measured in radians) of x.
acosh(...)
acosh(x)
Return the hyperbolic arc cosine (measured in radians) of x.
asin(...)
-- Suite --
Si vous parlez un minimum l'anglais, vous avez accès à une description exhaustive des fonctions du module math. Vous voyez en haut de la page le nom du module, le fichier qui l'héberge, puis la description du module. Ensuite se trouve une liste des fonctions, chacune étant accompagnée d'une courte description.
Tapez "Q" pour revenir à la fenêtre d'interpréteur, Espace pour avancer d'une page, Entrée pour avancer d'une ligne. Vous pouvez également passer un nom de fonction en paramètre de la fonction help.
>>> help("math.sqrt")
Help on built-in function sqrt in module math:
sqrt(...)
sqrt(x)
Return the square root of x.
>>>
Attention : Ne mettez pas les parenthèses habituelles après le nom de la fonction. C'est en réalité la référence de la fonction que vous envoyez à help. Si vous rajoutez les parenthèses ouvrantes et fermantes après le nom de la fonction, vous devrez préciser une valeur. Dans ce cas, c'est la valeur renvoyée par math.sqrt qui sera analysée, soit un nombre (entier ou flottant).
Nous reviendrons plus tard sur le concept des références des fonctions. Si vous avez compris pourquoi il ne fallait pas mettre de parenthèses après le nom de la fonction dans help, tant mieux. Sinon, ce n'est pas grave, nous y reviendrons en temps voulu.
Utiliser un espace de noms spécifique
En vérité, quand vous tapez import math, cela crée un espace de noms dénommé « math », contenant les variables et fonctions du module math. Quand vous tapez math.sqrt(25), vous précisez à Python que vous souhaitez exécuter la fonction sqrt contenue dans l'espace de noms math. Cela signifie que vous pouvez avoir, dans l'espace de noms principal, une autre fonction sqrt que vous avez définie vous-mêmes. Il n'y aura pas de conflit entre, d'une part, la fonction que vous avez créée et que vous appellerez grâce à l'instruction sqrt et, d'autre part, la fonction sqrt du module math que vous appellerez grâce à l'instruction math.sqrt.
Dans votre tête : Mais, concrètement, un espace de noms, c'est quoi ?
Il s'agit de regrouper certaines fonctions et variables sous un préfixe spécifique. Prenons un exemple concret :
import math
a = 5
b = 33.2
Dans l'espace de noms principal, celui qui ne nécessite pas de préfixe et que vous utilisez depuis le début de ce tutoriel, on trouve :
La variable a, la variable b et le module math, qui se trouve dans un espace de noms s'appelant math également. Dans cet espace de noms, on trouve :
la fonction sqrt, la variable pi, et bien d'autres fonctions et variables
C'est aussi l'intérêt des modules : des variables et fonctions sont stockées à part, bien à l'abri dans un espace de noms, sans risque de conflit avec vos propres variables et fonctions. Mais dans certains cas, vous pourrez vouloir changer le nom de l'espace de noms dans lequel sera stocké le module importé, voyez donc :
import math as mathematiques
mathematiques.sqrt(25)
Dans votre tête : Qu'est-ce qu'on a fait là ?
On a simplement importé le module math en spécifiant à Python de l'héberger dans l'espace de noms dénommé « mathematiques » au lieu de math. Cela permet de mieux contrôler les espaces de noms des modules que vous importerez. Dans la plupart des cas, vous n'utiliserez pas cette fonctionnalité mais, au moins, vous savez qu'elle existe. Quand on se penchera sur les packages, vous vous souviendrez probablement de cette possibilité.
Une autre méthode d'importation :from import
Il existe une autre méthode d'importation qui ne fonctionne pas tout à fait de la même façon. En fonction du résultat attendu, j'utilise indifféremment l'une ou l'autre de ces méthodes. Reprenons notre exemple du module math. Admettons que nous ayons uniquement besoin, dans notre programme, de la fonction renvoyant la valeur absolue d'une variable. Dans ce cas, nous n'allons importer que la fonction, au lieu d'importer tout le module.
>>> from math import fabs
>>> fabs(-5)
5
>>> fabs(2)
2
Pour ceux qui n'ont pas encore étudié les valeurs absolues, il s'agit tout simplement de l'opposé de la variable si elle est négative, et de la variable elle-même si elle est positive. Une valeur absolue est ainsi toujours positive.
Vous aurez remarqué qu'on ne met plus le préfixe math devant le nom de la fonction. En effet, nous l'avons importée avec la méthode from : celle-ci charge la fonction depuis le module indiqué et la place dans l'interpréteur au même plan que les fonctions existantes, comme print par exemple. Si vous avez compris les explications sur les espaces de noms, vous voyez que print et fabs sont dans le même espace de noms (principal).
Vous pouvez appeler toutes les variables et fonctions d'un module en tapant « * » à la place du nom de la fonction à importer.
>>> from math import *
>>> sqrt(4)
2
>>> fabs(5)
5
À la ligne 1 de notre programme, l'interpréteur a parcouru toutes les fonctions et variables du module math et les a importées directement dans l'espace de noms principal sans les emprisonner dans l'espace de noms math.
Bilan
Dans votre tête : Quelle méthode faut-il utiliser ?
Vaste question ! Je dirais que c'est à vous de voir. La seconde méthode a l'avantage inestimable d'économiser la saisie systématique du nom du module en préfixe de chaque fonction. L'inconvénient de cette méthode apparaît si l'on utilise plusieurs modules de cette manière : si par hasard il existe dans deux modules différents deux fonctions portant le même nom, l'interpréteur ne conservera que la dernière fonction appelée (je vous rappelle qu'il ne peut y avoir deux variables ou fonctions portant le même nom). Conclusion c'est à vous de voir en fonction de vos besoins !
En résumé
- Une fonction est une portion de code contenant des instructions, que l'on va pouvoir réutiliser facilement.
- Découper son programme en fonctions permet une meilleure organisation.
- Les fonctions peuvent recevoir des informations en entrée et renvoyer une information grâce au mot-clé return.
- Les fonctions se définissent de la façon suivante :
def nom_fonction(parametre1, parametre2, parametreN):
Bạn đang đọc truyện trên: Truyen247.Pro