Création d'un module simple
Test de module
Question
Créer un fichier aires.py avec 3 fonctions, bien documentées, qui retourne l'aire :
disque(rayon)rectangle(largeur, longueur)triangle(base, hauteur)
Rajouter des instructions, à base de print, permettant de tester ces 3 fonctions.
Indice
pi pourra être initialisé à 3.14159
On rappelle que l'on peut appeler un module simplement en important le nom du fichier Python, sans l'extension .py. Il faut bien sûr être dans le même dossier utilisateur.
Si j'ai défini un module dans le fichier trucmuche.py (avec des fonctions à l'intérieur), je vais l'appeler dans mon programme principal par l'instruction :
import trucmuche
Question
Créer un 2ème programme, appelé programme principal (affiche_aires.py), qui :
importe la fonction
disquedu moduleairesaffiche le résultat avec un rayon de 4
Que se passe-t-il ?
Indice
On peut importer une fonction d'un module en utilisant l’instruction suivante :
from nom_module import nom_fonction
Solution
On remarque que l'affichage du second programme affiche également le programme principal du programme aires.py ; ce qui n'est pas souhaitable.
Question
Dans aires.py, ajoutez les instructions de tests du module dans la fonction main() et ajoutez l’instruction vue en cours pour n'afficher que ce qui est nécessaire.
Relancer le programme affiche_aires.py et constater la différence.
Merci de lire la solution pour bien comprendre ce qu'il se passe.
Indice
On ajoute le test suivant dans le module, ainsi, la fonction main() n'est exécutée que si on exécuté le module et pas quand il est importé.
if __name__ == "__main__":
main()Solution
Principe
Une variable __name__ est créée automatiquement à l’exécution d'un programme. Cette variable contient le nom du programme courant.
Le nom du programme principal est toujours __main___. Donc la fonction main() est exécutée seulement si le fichier aires.py constitue le programme principal.
Ainsi, si ce dernier est exécuté tout seul, l'affichage est identique à la première question de l'exercice car la variable __name__ a la valeur __main__.
Mais si ce fichier est importé dans un autre fichier, à l’exécution le test __name__ == __main__ n'est pas vérifié et la fonction main n'est pas exécutée.
Question
Pour finir, constatez un problème...
Dans Spyder, appeler uniquement la méthode disque, et faites dessous un appel à la méthode triangle() avec un print(). Que se passe-t-il ?
Est-ce le même fonctionnement avec Geany ?
Solution
Spyder met en cache des informations. Pour résoudre ce problème, il faut supprimer toutes les variables.