Académique Documents
Professionnel Documents
Culture Documents
lamberttanon_k@yahoo.fr
http://www.kadjo-lambert.c4.fr
1
2017-2018
UE- PYTHON AVANCÉ
2
www.kadjo-lambert.c4.fr
UE- PYTHON AVANCÉ
3
www.kadjo-lambert.c4.fr
1. REFERENCES PARTAGEES ET GESTION DES 1.1 Références partagées
EXCEPTIONS
Définition et illustration1
On parle de référence partagée, lorsqu’au moins 2 variables référencent le même
objet.
cela ne cause aucun problème lorsque l’objet est immuable
lorsque l’objet référencé est un mutable, il y a ce que l’on appelle effet de bord
Variables Objet
1
21
temp int
0
21
temp int
1
'data sce'
str
temp
2
'data sce'
ecole str
2
21
temp int
ecole
1
21
temp int
1
'data sce'
ecole str
21 'data sce'
temp
[ . , .]
21 'data sce'
temp
[ . , .]
ecole
21 'data sce'
temp
[ . , .]
ecole
'master'
21 'data sce'
temp
[ . , .] [ . , .]
ecole
21 'data sce'
temp
[ . , .] [ . , .]
ecole
'master'
[ . , .] [ . , .]
ecole
[ . , .] [ . , .]
ecole
'master'
[ . , .] [ . , .]
ecole
[.]
[ . , .] [ . , .]
ecole
[.]
en retirant le code de traitement des erreurs du « flot principal » d’exécution d’un
programme, cela permet d’améliorer la lisibilité des programmes et faciliter leur
maintenance.
Le programmeur peut donc dicter sa conduite au programme lorsqu’une erreur se produit.
Ces erreurs survenant lors de l’exécution sont essentiellement dues à des causes
extérieures hors du contrôle du programmeur.
DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
1. REFERENCES PARTAGEES ET GESTION DES 1.2 Gestion des exceptions
EXCEPTIONS
Mécanisme
Lorsque votre programme s’interrompt en raison d’erreurs non corrigées, une trace
apparaît. Cela contient toutes les informations que l’interpréteur est en mesure de
fournir, parmi lesquelles le nom de l’erreur, sa cause, et peut-être même le numéro de
ligne exact où l’erreur est survenue.
NotImplementedError : Un développeur a volontairement levé cette exception dans une
des méthodes de sa classe afin de signaler que c’est aux filles de la classe de
l’implémenter.
IndentationError ou TabError: Le fichier mélange des tabulations et des espaces ou
n’utilisent pas le même nombre de tabulations ou d’espaces partout.
ImportError: Python ne peut pas importer un module.
AssertionError: Une expression assert est fausse.
AttributeError: l’on demande à un objet de fournir un attribut qu’il ne possède pas.
NameError: l’on tente d’utiliser un nom (de variable, fonction, classe, etc) qui n’existe pas.
IndexError: l’on tente d’accéder à une partie d’une intérable (souvent une liste ou un
tuple) qui n’existe pas.
KeyError: l’on tente d’accéder à une clé d’un mapping (souvent un dictionnaire) qui
n’existe pas
DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
1. REFERENCES PARTAGEES ET GESTION DES 1.2 Gestion des exceptions
EXCEPTIONS
Mécanisme
TypeError: l’on tente une opération incompatible avec ce type.
ValueError: l’on passe une valeur à une fonction qui n’a aucun sens dans ce contexte ou
dont le sens est ambiguë.
ZeroDivisionError: l’on fait une division par zéro
IOError: Erreur d’entrée / sortie (par exemples disque dur plein, système corrompu,
absence de permissions, fichier inexistant)
OSError: Le système d’exploitation retourne une erreur (concerne souvent le système de
fichier ou l’utilisation d’un sous-process avec les modules os, shutils, popen, subprocess,
multiprocessing, etc.
MemoryError: l’on utilise trop de mémoire
https://docs.python.org/fr/3/library/exceptions.html
DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
1. REFERENCES PARTAGEES ET GESTION DES 1.2 Gestion des exceptions
EXCEPTIONS
Mécanisme
Détection et traitement des exceptions
On peut détecter les exceptions en plaçant les instructions qui peuvent les générer dans un
bloc try.
Une instruction try peut être accompagnée d’une ou plusieurs clauses except,
d’une seule clause finally ou d’une combinaison try-except-finally
Syntaxe simple:
try:
Les instructions à surveiller lors de la détection d’exceptions.
except :
Les instructions pour la prise en charge des exceptions.
else :
Les instructions si pas de détection d’exceptions.
DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
1. REFERENCES PARTAGEES ET GESTION DES 1.2 Gestion des exceptions
EXCEPTIONS
Mécanisme
Détection et traitement des exceptions
Syntaxe complète:
try:
Les instructions à surveiller lors de la détection d’exceptions.
except :
Les instructions pour la prise en charge de Exception1.
else :
Les instructions si pas de détection d’exceptions.
finally :
Les instructions toujours exécutées même en cas d’exceptions.
Il est courant de voir un bloc try-except imbriqué dans un bloc try-finally
38
www.kadjo-lambert.c4.fr
2. FONCTIONS: UTILISATION AVANCEE 2.1 Rappels
Définition et syntaxe
Définition: Une fonction est un ensemble d’instructions regroupées sous un nom et s’exécutant
à la demande
Syntaxe: La définition d’une fonction est composée :
du mot clé def suivi de l’identificateur de la fonction, de parenthèses entourant les paramètres de
la fonction séparés par des virgules, et du caractère « deux points » qui termine toujours une
instruction composée ;
d’une chaîne de documentation indentée comme le corps de la fonction ;
du bloc d’instructions indenté par rapport à la ligne de définition, et qui constitue le corps de la
fonction.
Le bloc d’instructions est obligatoire. S’il est vide, on emploie l’instruction pass.
La documentation (facultative) est fortement conseillée
l’instruction return permet de renvoie une valeur pouvant être n’importe quel type vu
précédemment
La signature d'une fonction est la combinaison du nom de la fonction et de la liste de ses arguments
Valeur de retour
le mot clé return permet de spécifier une valeur de retour
Objet fonction
On passe les arguments par les références Le corps de la fonction n’est exécuté que
lors de l’appel de la fonction et non lors du
chargement
Définition
Affectation
a=4
b=5
Appel
Polymorphisme
Les fonctions sont polymorphes (acceptent des arguments de n’importe quel type)
il faut que ces types soient compatibles avec les opérations dans le corps de la fonction
Objet mutable
Objet mutable
Concernant les listes, dictionnaires, ensembles
Objet mutable
Concernant les listes, dictionnaires, ensembles
Objet mutable
Concernant les listes
Objet mutable
Concernant les listes
Objet mutable
Concernant les listes, dictionnaires, ensembles
Objet mutable
Concernant les listes, dictionnaires, ensembles
Signature mixte
Pour avoir une fonction qui accepte n'importe quel type de paramètres, on peut mixer tous ces
mécanismes de passage d'arguments mais en respectant l'ordre suivant: arguments obligatoires,
optionnels, extensible non nommés puis extensible nommés:
Signature mixte
Signature mixte
Création et manipulation
Compréhension de liste
On peut définir une liste en utilisant des mots-clés tels que for, in et if comme on définit un
ensemble en maths 'par compréhension' : ou
NB: contrairement aux ensembles en mathématique, pour Python, une liste est ordonnée et
peut contenir plusieurs fois le même élément.
la syntaxe est [f(x) for x in ma_liste] correspond à {f (x ) x ma_liste }
Ainsi, une fois qu’une fonction est définie (numérique ou non), elle peut être appliquée
au nombres de la liste de départ, les images de cette fonction constitueront la liste
d’arrivée.
On obtient le même résultat en mettant directement une expression en x à la place
de f(x)
Exemple 1: Liste des carrés des éléments des dix premiers entiers
Création et manipulation
Compréhension de liste
Exemple 2: Liste des carrés des éléments des dix premiers entiers : utilisation d’une fonction
Création et manipulation
Compréhension de liste
Filtrage et application d’une fonction
[f(x) for x in liste if Condition(x)] correspond à {f (x ) x liste tel que Condition(x )} avec
imbrication de boucles for
Exemple:
Création et manipulation
Compréhension de dictionnaire
Exemple 4:
Générateurs
Ils fournissent un moyen de générer des exécutions telles qu’elles ne calculent que les valeurs
réellement demandées. Ceci peut s’avérer beaucoup plus efficace (en terme de mémoire) que le
calcul, par exemple, d’une énorme liste par compréhension en une seule fois.
Fonction génératrice
En Python, une fonction est une fonction génératrice lorsque son corps contient le mot clé yield.
Cette fonction ne doit retourner aucune valeur.
yield est un mot clé utilisé en lieu et place de return
En fait, tant qu’on ne touche pas au générateur, il ne se passe rien. Puis, dès qu’on commence à
itérer sur le générateur, le code de la fonction s’exécute.
Fonction génératrice
En Python, une fonction est une fonction génératrice lorsque son corps contient le mot clé yield.
Cette fonction ne doit retourner aucune valeur.
yield est un mot clé utilisé en lieu et place de return
En fait, tant qu’on ne touche pas au générateur, il ne se passe rien. Puis, dès qu’on commence à
itérer sur le générateur, le code de la fonction s’exécute.
77
www.kadjo-lambert.c4.fr
3. CONCEPTION DES CLASSES 3.1 Classes, instances et méthodes
Notion de classe
Une classe est un type permettant de regrouper dans la même structure : les informations
(champs, propriétés, attributs) relatives à une entité ; les procédures et fonctions
permettant de les manipuler (méthodes). Champs et méthodes constituent les membres de
la classe.
Notion de classe
Définition d’une classe
Les variables de cet espace de nommage sont appelées les attributs de la classe
NB: Les classes peuvent utiliser (mais pas modifier) les variables définies au niveau principal
Méthodes
Ce sont des fonctions à l’intérieur des classes qui sont dédiées aux comportements des classes
constructeur
la méthode spéciale __init__
Cette méthode est appelée
automatiquement APRES la création de
l’objet, et contient le code
d’initialisation de l’objet (généralement
une modification des attributs pour leur
donner leur état de départ).
Afficheur d’objet
la méthode spéciale __str__
Cette méthode permet d’utiliser la
fonction print() pour afficher les
attributs d’une instance.
Cette méthode est automatiquement
appelé par print()
Surcharge d’opérateurs
La surcharge permet à un opérateur de posséder un sens différent suivant le type de des
opérandes.
Par exemple, l'opérateur + permet :
Python possède des méthodes de surcharge . On va considérer les opérateurs que l’on
souhaite surcharger comme des méthodes de la classe. Le nom de la méthode
correspondante à un opérateur sera précédé et suivi par un double underscore :
__NomOperateur__
Si l’opérateur en question est unaire, la méthode n’aura que l’objet courant en
paramètre :
def __NomOperateur__(self):
...
Si l’opérateur en question est binaire, la méthode aura l’objet courant en paramètre
ainsi qu’un autre objet :
def __NomOperateur__(self,other):
DATA SCIENCE INSTITUTE/INP-HB 2019
... Dr Lambert KADJO
3. CONCEPTION DES CLASSES 3.2 Méthodes spéciales
Méthodes spéciales
Python possède des méthodes de surcharge pour :
tous les types (__call__, __str__, ...) ;
les séquences (__len__, __iter__, ...).
les opérations numériques (avec obj1 et obj2 , deux instances)
Surcharge d’opérateurs
Définition
La relation particulière entre l’objet instance et l’objet classe est appelée héritage.
Permet de se servir d'une classe préexistante pour en créer une nouvelle qui possédera
quelques fonctionnalités différentes ou supplémentaires
Objets Programme
class Maclas2:
pass
En Python, l'ancêtre
d'une classe est Maclasfille class Maclasfille(Maclas1, Maclas2):
simplement indiqué
def func(self, …):
entre parenthèses
self.x = 10
immédiatement après
le nom de la classe. Il Maclasfille hérite des classes Maclas1 et Maclas2, c-à-d, si un
n'y a pas de mot clé attribut n’est pas trouvé dans l’espace de nommage de
spécifique Maclasfille, on cherche automatiquement dans l’espace de
DATA SCIENCE INSTITUTE/INP-HB 2019
comme extends en Java nommage de chacune de ces deux classes
Dr Lambert KADJO
3. CLASSES ET ESPACES DE NOMMAGE 3.3 Héritage
Définition
Instanciation après héritage
Objets Programme
class Maclas2:
pass
Maclasfille class Maclasfille(Maclas1, Maclas2):
def func(self, …):
Instance Instance self.x = 10
Moninstanc1 Moninstanc2
Moninstanc1 = Maclasfille()
Moninstanc2 = Maclasfille()
La recherche d’un attribut se fait en remontant
l’arbre d’héritage de bas en haut (des instances
aux super-classes) DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
3. CLASSES ET ESPACES DE NOMMAGE 3.3 Héritage
Manipulation
Remontons l’arbre d’héritage
Manipulation
Remontons l’arbre d’héritage
Manipulation
On s’aperçoit que c’est la méthode set_x() de
la classe mère qui a été utilisée puisque la
sous-classe n’en possède pas dans son espace
de nommage
Manipulation
la méthode __init__ et héritage Il faut appeler explicitement
l’initialisateur de la classe
mère
Manipulation
Si on n’appelle pas
la méthode __init__ et héritage explicitement l’initialisateur
de la classe mère
97
www.kadjo-lambert.c4.fr
4. FICHIERS ET SYSTÈMES DE FICHIERS 4.1 Systèmes de fichiers
pour changer le répertoire courant de travail, il faut importer le module os puis utiliser la fonction chdir
(change Directory) de ce module.
NB: N’oubliez pas d’échapper l’antislash afin de l’utiliser tel quel dans le nom du dossier
Pour que cette instruction fonctionne, le répertoire doit exister.
Sous Linux et MACos, c’est plutôt le slash qui est utilisé. On n’a donc pas besoin d’échapper. On peut
aussi l’utiliser sous Windows
NB: On pourra utiliser realpath() ou abspath() avant tout appel à une autre fonction
de chemins, afin de s’assurer que les chemins sont au bon format
sys.path: Liste contenant tous les répertoires dans lesquels l’interpréteur recherche des
modules lorsque la directive import est utilisée, ou lorsque des noms de fichiers sont
utilisés sans leur chemin complet. path peut être modifiée à la volée dans un
programme.
sys.platform: Informe sur le système d’exploitation. Il est plus précise que à os.name
stdin, stdout et stderr: Objets fichiers pointant respectivement sur l’entrée standard, la
sortie standard et la sortie standard pour les erreurs
module subprocess
Ce module, introduit à la version 2.4 de Python, offre des fonctions de très haut niveau,
permettant de créer de nouveaux processus. L’objectif de subprocess est de remplacer à
terme la série des fonctions popen*() et spawn*() , et autres créateurs de processus
enfants, pour fournir une interface unifiée plus simple d’utilisation et plus souple.
subprocess.call(*args, **kwargs) : Lance sur le système une commande avec des
arguments, attend que la commande s’achève, et renvoie le code de retour. Équivalente
à os.system()
module subprocess
Sous Windows, l’option /c ferme l’invite après la fin de l’exécution de la commande
NB: La fonction open est disponible sans avoir besoin de rien importer.
DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
4. FICHIERS ET SYSTÈMES DE FICHIERS 4.5 Fichiers
Definition
Les fichiers sont des objets itérateurs
on peut donc exploiter toute la puissance des itérateurs avec les fichiers
Avec la touche
Tabulation, on obtient
un menu déroulant
comportant tous les
fichiers et répertoires de
la partition saisie
Definition
On ouvre ici, un fichier
existant sur le disque
Definition
le caractère « r »
préfixant le nom
permet de ne pas
interpréter le
caractère « \ »
Version
readline()
Le mot-clé with, prélude au bloc dans lequel on va manipuler notre fichier.
open qui va renvoyer un objet TextIOWrapper (notre fichier).
Le mot-clé as déjà vu dans le mécanisme d'importation signifie toujours la même
chose : « en tant que ».
variable: la variable qui contiendra notre objet. Si la variable n'existe pas, Python
la crée.
NB: Vous pouvez appeler mon_fichier.closed pour vérifier que le fichier est refermé.
Si le fichier est fermé,mon_fichier.closed vaudra True.
Il est inutile, par conséquent, de fermer le fichier à la fin du bloc with
DATA SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
4. FICHIERS ET SYSTÈMES DE FICHIERS 4.5 Fichiers
import pickle
On va ensuite utiliser deux classes incluses dans ce module : la classe Pickler et la
classe Unpickler.
Pour créer notre objet Pickler, nous allons l'appeler en passant en paramètre le fichier
dans lequel nous allons enregistrer notre objet.
score = { "joueur 1": 5, "joueur 2": 35, "joueur 3": 20, "joueur 4": 2 }
with open('donnees', 'wb') as fichier:
mon_pickler = pickle.Pickler(fichier)
mon_pickler.dump(score)
Et après cet appel, si le fichier a pu être lu, dans la variable score_recupere, vous récupérez
votre dictionnaire contenant les
DATA scores
SCIENCE INSTITUTE/INP-HB 2019
Dr Lambert KADJO
4. FICHIERS ET SYSTÈMES DE FICHIERS 4.5 Fichiers