python rapide - Fabrice Maurel
python rapide - Fabrice Maurel
python rapide - Fabrice Maurel
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Présentation cours<br />
●<br />
18 h CM (F. <strong>Maurel</strong>) + 16 h TD/TP (F. <strong>Maurel</strong> / T. Roy)<br />
– 5/6 h Python<br />
– 2,5/2 h Introduction à l'IHM (démarche participative<br />
centrée utilisateur) + Mise en place des groupes<br />
– 2,5/2 h : Méthodes de conception / Brainstorming<br />
– 2,5/2 h : Maquettage<br />
– 5,5/4 h : Prototypage <strong>python</strong><br />
fabrice.maurel@info.unicaen.fr<br />
thibault.roy@info.unicaen.fr<br />
http://www.info.unicaen.fr/~fmaurel
Présentation Python (1)<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
Portable (Unix, MacOs, Windows...), J<strong>python</strong> (bytecode<br />
Java)<br />
Gratuit et utilisable dans les projets commerciaux<br />
Syntaxe très simple et types de données évoluées (3 à<br />
5 fois plus court que C ou C++)<br />
Gestion automatisée de la mémoire (mécanisme de<br />
comptage de références)<br />
Pas de pointeurs explicites<br />
Optionnellement multi-threadé<br />
Orienté objet avec héritage multiple et surcharge des<br />
opérateurs<br />
Système d'exception pour la gestion des erreurs
Présentation Python (2)<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
Dynamique, orthogonal, réflectif et<br />
introspectif<br />
Dynamiquement typé<br />
Deux implémentations : interprété, compilateur<br />
générant du bytecode java<br />
Extensible<br />
Bibliothèque standard complète<br />
Évolution continue<br />
Bon choix pour le traitement de XML
Premier pas (1)<br />
●<br />
Typage dynamique<br />
– Séparateur décimal : .<br />
– Division Euclidienne ou décimale : /<br />
– Modulo : %<br />
– Puissance : **<br />
– Type (objet) : retourne le type de l'objet<br />
●<br />
Affectation<br />
– Simple : var = val<br />
– Multiple : var1 = var2 = var3 = val<br />
– Parallèle : var1,var2,var3 = val1,val2,val3<br />
– Combinée : +=, *=, /=, -=
Premier pas (2)<br />
● Comparaison : ==, !=, >, =,
Premier pas (3)<br />
● Commentaires : #...................<br />
●<br />
Extension conseillée pour un fichier <strong>python</strong> : .py<br />
● -*- coding:Latin-1 -*- ou -*- coding:Utf-8 -*-<br />
● Importation de modules (math, random, ...) :<br />
– import module (==> module.nomFonction)<br />
– from module import nomFonction<br />
– from module import *<br />
● Éditeurs conseillés sous Linux :<br />
– Idle + F5<br />
– Emacs + <strong>python</strong> nomprogramme
Principaux types de données (1)<br />
● Données numériques (mutables) :<br />
– Integer<br />
– Long (nombre de chiffre significatif quelconque<br />
limité uniquement par la taille de la mémoire<br />
disponible sur l'ordinateur utilisé)<br />
– Float (3.14, 10., .001, 1e100, 3.14e-10)<br />
● Données alphanumériques (non mutables) :<br />
– String<br />
– s="chaine" ou s='chaine'<br />
– Opérateur de concaténation : +<br />
– Opérateur d'appartenance : in
Principaux types de données (2)<br />
●<br />
Les autres séquences<br />
– Les listes (mutables) :<br />
● List<br />
● l=[1,2,3,"chaine",[1,4],3.14,4,5]<br />
● Opérateur de concaténation : +<br />
● fonctions : l=range(deb,fin,pas), len(l)<br />
– Les tuples (non mutables):<br />
● Tuple<br />
● t=(1,2,3,"chaine",[1,4],3.14,4,5)<br />
● Opérateur de concaténation : +<br />
– Les dictionnaires (mutables, non ordonnés) :<br />
●<br />
●<br />
Dict<br />
d={c1:v1,c2:v2,c3:v3}
Structures de contrôle (1)<br />
● Conditionnelle :<br />
if condition :<br />
instructions<br />
elif condition :<br />
instructions<br />
else :<br />
instructions<br />
● L'instruction while :<br />
●<br />
while condition:<br />
instructions<br />
Instruction de sortie forcée d'une boucle : break
Structures de contrôle (2)<br />
●<br />
L'instruction for élément in séquence<br />
– L'itération traite successivement tous les éléments<br />
d'une séquence donnée (caractères d'une chaîne,<br />
éléments d'une liste, clés d'un dictionnaire)<br />
– for car in "chaîne":print car,<br />
– for elem in [1,2,3]:print elem,<br />
– for cle in {1:"a",2:"b",3:"c"}:print cle,<br />
– for i in range(len(l)) (==> parcours des index de l)<br />
● Création originale de liste :<br />
– [c+c for c in "chaine" if c
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
Les chaînes<br />
Concaténation : "a"+"b"<br />
Répétition : "a"*4<br />
Indexage de ch : de 0 à len(ch)-1<br />
Accès à 1 élément de ch : ch[index]<br />
Extraction d'un slice : ch[n:m],ch[:m],ch[n:]<br />
Création d'une copie de ch : ch[:]<br />
Non modifiable et comparable<br />
Quelques fonctions intégrées : len, float, int<br />
● opérateur de formatage : %<br />
● Caractères spéciaux : \n, \t, \b ...
Les listes / les tuples<br />
●<br />
●<br />
●<br />
●<br />
Concaténation, répétition, indiçage, accès et<br />
slicing identique au chaîne.<br />
Les listes sont modifiables (potentiellement par<br />
slicing avancé : insertion, suppression,<br />
remplacement de tranches)<br />
Fonctions intégrées : len, del<br />
Les tuples ont les mêmes propriétés que les<br />
listes à l'exception de celles qui peuvent<br />
provoquer une modification.
Les dictionnaires<br />
●<br />
●<br />
●<br />
●<br />
Non ordonné ==> la saisie n'implique pas un<br />
ordre des paires clé/valeur<br />
Fonctions intégrés : del, len<br />
Accès/modification : dico[clé]=valeur<br />
Parcours avec le for clé in dico mais aucune<br />
prévision possible de l'ordre de traitement des<br />
clés.
Les fonctions originales<br />
def nomDeLaFonction(p1=v1,p2=v2,...):<br />
"description de la fonction"<br />
instructions<br />
return val (optionnel !)<br />
Attention : passage automatiquement par valeur pour les entiers<br />
et les flottants mais automatiquement par référence pour les<br />
listes et les dictionnaires !<br />
●<br />
Nombre de variable arbitraire : def f(*args)<br />
● Corps d'un programme <strong>python</strong> :<br />
if __name__ == "__main__":<br />
nomDeLaFonction(p2=v3,p1=v4)
Gestion des erreurs<br />
● Mécanisme de traitement des exceptions :<br />
try:<br />
instruction1 sous réserve<br />
except:<br />
instructions2 si erreur pendant instruction1<br />
else:<br />
instructions3 si pas d'erreur pendant instruction1<br />
● Lever une exception :<br />
raise nomException, "message optionnel"
Gestion des fichiers<br />
● Choix du répertoire courant :<br />
from os import chdir<br />
chdir("chemin relatif ou absolu")<br />
● Ouverture d'un fichier en lecture ou en écriture :<br />
f=open(nomFichier,'a' ou 'r')<br />
●<br />
●<br />
●<br />
●<br />
●<br />
Fermeture d'un fichier : f.close()<br />
Écriture dans un fichier : f.write("chaine")<br />
Lecture dans un fichier : t=f.read(nbCar)<br />
Lecture ligne à ligne : t=f.readline()<br />
Lecture des lignes restantes : t=f.readlines()
Les méthodes<br />
●<br />
●<br />
●<br />
●<br />
Toutes les données sont en fait des objets et<br />
ont comme les fichiers un certain nombre de<br />
méthodes définies.<br />
dir(objet) : liste des méthodes de l'objet<br />
help(méthode) : l'aide sur la méthode<br />
String : split, join, find, count, lower, append...<br />
● List : sort, append, reverse, index, remove, ...<br />
● Dict :keys, values, has_key, items, copy, get, ...
Les classes<br />
Class NomDeClasse(object):<br />
"description de la classe"<br />
def __init__(self, arg1,arg2):<br />
"description"<br />
self.attribut1=arg1<br />
self.attribut2=arg2<br />
if __name__ == "__main__":<br />
arg1,arg2=val1,val2<br />
c=NomDeClasse(arg1,arg2)
Héritage<br />
●<br />
Héritage simple<br />
Class NomDeClasse(superClasse):<br />
...<br />
●<br />
Héritage multiple<br />
Class NomDeClasse(superClasse1,superClasse2):<br />
...<br />
●<br />
Variables brouillées : __var ou __var_
La surcharge des opérateurs<br />
●<br />
Surcharge des méthodes comme (a chercher<br />
avec la fonction dir) :<br />
– __repr__<br />
– __str__<br />
– __getitem__<br />
– __setitem__<br />
– __add__<br />
– __mul__<br />
– __div__<br />
– __sub__