13.04.2015 Views

python rapide - Fabrice Maurel

python rapide - Fabrice Maurel

python rapide - Fabrice Maurel

SHOW MORE
SHOW LESS

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__

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!