Enseignements

Systeme Tp 1 Exo 5

Ecriture de programmes (modules)

Un module python est un simple fichier contenant des instructions en python. A l’exception du module module main décrit ci-après, le nom du module correspond au nom du fichier. Ainsi le module de nom “toto” correspond simplement au contenu du fichier de nom “toto.py” (ou “toto.pyc”, sa version précompilée). Un module python peut en inclure en un autre. Pour ça, deux solutions:

>>> import math # solution 1: importe tout le contenu du module math
>>> math.sin(0) # il faut donner le nom du module en prefixe
>>> from math import sin # solution 2: importe selectivement un symbole
>>> sin(0) # grace a la solution 2, plus besoin de prefixe

Le module main représente le module principal d’un programme python. Autrement dit celui que l’on demande à python d’exécuter en premier, et qui comporte un module principal, appelé main. Contrairement aux autres modules, il n’y a pas de lien entre le nom du module main et le fichier qui le contient.

La façon la plus simple d’écrire un programme python est donc d’utiliser son éditeur favori et d’y insérer les instructions du programme. Faites un essai, en sauvant les instruction suivantes dans un fichier de nom prog.py:


# Mon premier programme python, quelle aventure !
print "Hello, world!"
 

Ensuite, vous pouvez exécuter ce programme de la façon suivante, depuis un shell Unix:

~> python prog.py
Hello, world!
~>

En fait, tout module python peut se transformer en module principal. C’est même fortement recommandé, afin de tester que le programme ne comporte pas d’erreur (en génie logiciel on appelle cela des tests unitaires). Pour cela, l’astuce consiste a insérer une section d’autotest, qui n’est exécutée que lorsque le module est exécuté en tant que programme principal:

# ici on suppose que le fichier contient les instructions
# qui forment le code du module
# par exemple la fonction suivante:

def ma_func(x):
   """Une fonction qui calcule y=x+1"""
   return x+1

# Si ces instructions sont placees dans le fichier toto.py
# alors dans un autre module python, on peut utiliser la fonction
# ma_func a l'aide de l'instrcution 'import toto'
# ou 'from toto import ma_func

# Mais on peut aussi transformer ce module 'toto' en module main
# en inserant une section d'auto-test:

if __name__ == "__main__":
  # Je peux mettre ici les instructions a executer quand le module
  # est utilise en tant que module main
  print "Je test ma_func avec x=3:", ma_func(3)

Et donc, en supposant que vous avez sauvé le code précédent dans le fichier de nom toto.py, vous pouvez tester son exécution de la façon suivante:

>>> python toto.py
Je test ma_func avec x=3: 4
>>>

Mais je peux aussi utiliser mon module normalement depuis un autre programme principal:


# J'importe d'abord le module (facon 1)
import toto

# Ensuite j'utilise la fonction
print "Le resultat est:", toto.ma_func(10)

Puis, en supposant que le code suivant a été sauvé dans le fichier appel_toto.py:

~> python appel_toto.py
Le resultat est: 11
~>

Mais on peut aussi charger un module directement dans l’interpréteur python utilisé de façon interactive:

~> python
>>> import toto
>>> toto.ma_func(11)
12
>>> help(toto) # pratique non ?

On peut aussi ecommencer les opérations précédentes avec la deuxième forme d’import:

~> python
>>> from toto import ma_func
>>> ma_func(11)
12

On peut aussi combiner les avantages (et incovénients) des deux méthodes:

~> python
>>> from toto import * # TOUT le contenu du module toto
>>> ma_func(11)
12

Dans ce dernier cas, attention au problèmes de masquage et de portée (expliquez).

Pour faire des programmes qui fonctionnent aussi bien sous linux que sous windows, il suffit d’insérer le commentaire suivant sur la première ligne du fichier: #!/bin/env python
(A condition d’avoir défini la variable d’environnement python)

Exemple d’en-tête typique que l’on trouve dans un module python:

#!/bin/env python
# -*- coding: Latin-1 -*-
""" La description generale du module"""
# fichier : module.py
# auteur : Olivier Dalle

from math import sin
from toto import *

...

Retour en haut de la feuille d’exercice

Page d’Accueil

Enseignements 2017-18

Enseignements Antérieurs

Recherche…

edit SideBar

Blix theme adapted by David Gilbert, powered by PmWiki