Académique Documents
Professionnel Documents
Culture Documents
PYTHON
www.univ-pau.fr/~puiseux
Ce document reprend en trs grande partie le tutoriel de Guido Van Rossum [VR].
Quelques modications et simplications y sont apportes.
Rsum.
Janvier 2010
Python
Pierre Puiseux
1. Introduction
Python est developp depuis 1989 par Guido van Rossum et de nombreux contributeurs.
Un classement des langages de programmation les plus populaires, par
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
The ratings are calculated by counting hits of the most popular search engines. The search
query that is used is +"<language> programming". The search query is executed for the
regular Google, Google Blogs, MSN, Yahoo !, Wikipedia and YouTube web search for the last
12 months.
2009
2010
Langage
delta
Java
17.482%
-1.54%
16.215%
+0.28%
PHP
10.071%
+1.19%
C++
9.709%
-0.41%
(Visual) Basic
7.354%
-1.81%
C#
5.767%
+0.16%
Python
4.453%
-0.28%
Perl
3.562%
-0.74%
JavaScript
2.707%
-0.65%
11
10
Ruby
2.474%
-0.67%
10
11
Delphi
2.392%
-0.91%
37
12
Objective-C
1.379%
+1.24%
13
Go
1.247%
+1.25%
14
14
SAS
0.809%
+0.01%
13
15
PL/SQL
0.718%
-0.29%
18
16
ABAP
0.641%
+0.10%
15
17
Pascal
0.624%
-0.04%
23
18
Lisp/Scheme
0.576%
+0.14%
20
19
ActionScript
0.566%
+0.11%
24
20
MATLAB
0.540%
+0.11%
B
B
Python .
perrne,
ouvert
(sans
intervention du programmeur)
UPPA
Janvier 2010
Python
Pierre Puiseux
B
B
(optionnellement) multi-thread
orient-objet
I
I
I
B
B
rutilisable
hritage multiple
surcharge des oprateurs
toutes les mthodes sont virtuelles
systme d'exceptions
dynamique
typage dynamique tout objet possde un type bien dnit l'excution, qui n'a pas
besoin d'tre dclar l'avance.
B
B
B
B
B
orthogonal
rectif
1Wikipedia : un thread ou processus lger, galement appel l d'excution (autres appellations connues :
unit de traitement, unit d'excution, l d'instruction, processus allg), est similaire un processus car tous
deux reprsentent l'excution d'un ensemble d'instructions du langage machine d'un processeur. Du point de
vue de l'utilisateur, ces excutions semblent se drouler en parallle. Toutefois, l o chaque processus possde
sa propre mmoire virtuelle, les threads d'un mme processus se partagent sa mmoire virtuelle. Par contre,
tous les threads possdent leur propre pile d'appel.
UPPA
Janvier 2010
B
1.2.
B
B
B
B
Python
Python
Pierre Puiseux
dveloppements rapides
pourquoi faire ?
unix
Langage "glue" pour enchaner les traitements par dirents programmes. Par exemple un mailleur produit un maillage, repris par un code lments nis pour simulation
numrique, dont les rsultats sont leur tour exploits pour visualisation.
wxwidget, tk,
UPPA
Python.
Janvier 2010
Python
B
B
B
en ligne de commande
Python
Pierre Puiseux
Python
$ python
>>>
le prompt de
ipython
Python
est
>>>
ou bien
...
In [n] :
pour les entres et
Out [n+1] :
pour les sorties, n tant le numro de l'instruction.
pour quitter
Python
ctl-d
if
>>> le_monde_est_plat = 1
>>> if le_monde_est_plat :
... print " G a f f e p a s t o m b e r p a r d e s s u s b o r d ! "
...
1.3.2. Excution de chiers de modules. On peut sauvegarder un programme excutable dans
un chier module
toto.py,
import sys
print " L e s a r g u m e n t s s o n t : " , sys . argv
puis excuter ce programme en invoquant
Ossau.py
UPPA
Janvier 2010
Python
Pierre Puiseux
B ipython
UPPA
Janvier 2010
Python
Pierre Puiseux
B bpython
galement
B idle est
tkinter
UPPA
Janvier 2010
Python
Pierre Puiseux
B eclipse+PyDev
le plus abouti
UPPA
Janvier 2010
Python
Pierre Puiseux
B Eric
B etc...
1.4. O trouver la documentation ? La documentation Python est trs riche et plutt
bien organise.
(1) Le document de base est
(a)
(b)
http://docs.python.org
et surtout
http://docs.python.org/tutorial
http://docs.python.org//library/index.html
(2) Une bonne entre en matire pour comprendre les concepts :http://diveintopython.
org/
http://rgruet.free.fr/#QuickRef
http://www.python.org/doc/QuickRef.html
1.5. Exercices.
(1) Trouver dans la documentation la fonction
input()
MonObjet.
devez-vous dnir pour pouvoir additionner (c'est dire utiliser l'oprateur d'addition)
deux instances de
MonObjet
ainsi :
a = MonObjet(1)+MonObjet(2)
UPPA
Janvier 2010
Python
Pierre Puiseux
>>> 2+2
>>> (50 -5*6)/4
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
# Le signe =
largeur = 20
hauteur = 5*9
largeur * hauteur
x = y = z = 0 # Mettre zro x , y et z
x ,y ,z = 0 ,0 ,0
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
UPPA
1j * 1J
1 j * complex (0 ,1)
3+1 j *3
(3+1 j )*3
(1+2 j )/(1+1 j)
a = 1.5+0.5 j
a . real
a . imag
abs (a )
10
Janvier 2010
Python
Pierre Puiseux
2.4. La variable _.
>>>
>>>
>>>
>>>
'
c a r a c t r e s non a s c i i , \
unicode plutot longue contenant
l a l i g n e e t l e s s a u t s de l i g n e
Les chanes peuvent tre concatnes (accoles) avec l'oprateur +, et rptes avec * :
Pas de type caractre (char) : un caractre est simplement une chane de taille un.
Les chanes peuvent tre dcomposes (indexes) le premier caractre d'une chane est
en position 0.
>>>
>>>
>>>
>>>
B
11
Janvier 2010
Python
Pierre Puiseux
s[:i] + s[i:]==s
Les indices peuvent tre des nombres ngatifs, pour compter partir de la droite.
len() ?
Une liste de valeurs (lments) entre crochets et spars par des virgules. Les lments
d'une liste nont pas ncessairement le mme type.
Comme les indices des chanes, les indices des listes commencent
>>>
>>>
>>>
>>>
>>>
>>>
B
a [0]
a [3]
a [ -2]
a [1: -1]
a [:2] + [ ' b a c o n ' , 2*2]
3* a [:3] + [ ' Boe ! ' ]
A la dirence des chanes, qui sont non-modiables, il est possible de changer les lments individuels d'une liste
l'aectation dans des tranches est aussi possible, et cela peut mme changer la taille de
la liste :
UPPA
12
Janvier 2010
>>>
>>>
>>>
>>>
B
Python
Pierre Puiseux
a [0:2] = [1 , 12]
a [0:2] = []
a [1:1] = [ ' b l e t c h ' , ' x y z z y ' ]
a [:0] = a # Insre ( une copie de ) soi - mme au dbut
La fonction intgre
len()
>>>len(a)
B
Il est possible d'emboter des listes (crer des listes contenant dautres listes), par exemple :
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
q = [2 , 3]
p = [1 , q , 4]
len (p )
p [1]
p [1][0]
p [1]. append ( ' x t r a ' )
p
q
p[1]
et
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
2.8. Premiers pas vers la programmation. Bien sr, nous pouvons utiliser Python pour
des tches plus compliques que d'ajouter deux et deux. Par exemple, nous pouvons crire
une sous-squence de la suite de Fibonacci de la faon suivante :
>>>
...
...
>>>
...
# Suite de Fibonacci
# La somme de deux lments dfinit le suivant
a , b = 0, 1
while b < 10:
print b
UPPA
13
Janvier 2010
Python
Pierre Puiseux
... a , b = b , a+b
Cet exemple introduit plusieurs fonctionnalits nouvelles.
B
B
et
1.
et
prennent simul-
Les expressions en partie droite sont d'abord toutes values avant toute aectation.
La boucle
I
I
I
I
I
while
b < 10)
et !=.
Le corps de la boucle est indent : l'indentation est le moyen par lequel Python regroupe
les instructions.
l'instruction
accepte plusieurs expressions et chanes. Une virgule nale empche le retour chariot
aprs l'achage :
>>>
>>>
...
...
...
a , b = 0, 1
while b < 1000:
print b ,
a , b = b , a+b
2.8.1. Une premire fonction. On peut faire de la suite d'instructions prcdente une fonction
qui renvoit le n-me terme de la suite :
while,
la fonction
input
et
valeur,
M,
du
2n , n N ?
raw_input ?
On pourra
UPPA
14
Janvier 2010
Python
Pierre Puiseux
>>> x = input ()
3.14
>>> type ( x)
>>> x = raw_input ()
3.14
>>> type ( x)
>>> x = input ()
u ' Demain i l f a i t beau , j e v a i s l \ ' Ossau '
>>> x
UPPA
15
Janvier 2010
Python
Pierre Puiseux
Unicode
3.1.1.
de facilit :
B
B
Le type
Le type
et
str.
(1) Python 2.x : ds que l'on doit manipuler des chanes de caractres contenant les caractres non-ASCII, il est conseill d'utiliser le type
la chane par la lettre
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
u.
unicode,
u =u ' '
u
print u , type ( u)
v= ' eb '
v
print v , type ( v)
u +v
# ouuups !
v =u ' e b '
u +v
# yes !
>>>
>>>
>>>
>>>
>>>
>>>
>>>
u =u ' '
u , print (u ), type (u)
v= ' eb '
type ( v), print (v )
u +v
# ok !
u =b ' a b c '
# le type byte de Python3 est le type str de Python2 . x
v =b ' ' # ouuups non ascii !
%, str()
et
repr().
print.2
2(Une troisime manire est d'utiliser la mthode write() des objets chier ; le chier de sortie standard
peut tre rfrenc par sys.stdout. Voyez le manuel Library Reference pour plus d'informations.)
UPPA
16
Janvier 2010
Python
Pierre Puiseux
string
contient
quelques oprations utiles pour remplir des chanes de caractres une largeur de
colonne donne. Pour convertir n'importe quelle valeur en chane de caractres : passezla la fonction
repr(),
ou
str()
format%variables
comme pour la fonction
sprintf()
repr()
str()
pour renvoit des reprsentations faciles lire par les humains, alors que
comme les nombres ou les structures comme les listes et les dictionnaires, ont la mme
reprsentation dans les deux fonctions. Les chanes et les nombres virgule ottante, ont
deux reprsentations distinctes.
Quelques exemples :
>>>
>>>
>>>
>>>
0
1
2
3
4
5
6
7
8
9
10
0
1
4
9
16
25
36
49
64
81
100
0
1
8
27
64
125
216
343
512
729
1000
(Notez qu'un espace entre chaque colonne a t ajout cause de la faon dont
fonc-
UPPA
17
Janvier 2010
Python
3.2.2. Le module
string.
La fonction
Pierre Puiseux
string.ljust(),
tres dans un champ d'une largeur donne en la compltant avec des espaces du ct gauche.
rien, elles renvoient juste une nouvelle chane de caractres. Si la chane de caractres d'entre
est trop longue, elles ne la tronquent pas, mais la renvoient sans changement ; cela gchera
votre prsentation de colonne mais c'est habituellement mieux que l'alternative, qui serait de
tricher au sujet d'une valeur. (Si vous voulez vraiment la troncature vous pouvez toujours
ajouter une opration de dcoupage, comme
Il y a une autre fonction,
du ct gauche avec des zros. Elle sait grer les signes positifs et ngatifs :
>>>
>>>
>>>
>>>
import string
string . zfill (12 , 5)
string . zfill ( -3.14 , 7)
string . zfill (3.14159265359 , 5)
>>> table = { ' S j o e r d ' : 4127 , ' J a c k ' : 4098 , ' Dcab ' : 8637678}
>>> for nom , telephone in table . items ():
... print '%10s ==> %10d ' % ( nom , telephone )
...
La plupart des formats fonctionnent exactement comme en C et exigent que vous passiez le
type appropri.
3.2.3. Lire et crire des chiers.
18
Janvier 2010
Python
Pierre Puiseux
Le premier argument est une chane de caractres contenant le nom du chier. Le deuxime
argument est une autre chane de caractres contenant quelques caractres dcrivant la manire
mode vaut
B r quand le chier doit tre seulement lu,
B w pour seulement crit (un chier dj existant avec le mme nom sera eac),
B et a ouvre le chier en ajout ; les donnes crites dans le chier seront automatiquement
d'utiliser le chier.
ajoutes la n.
B r+
3.2.4. Mthodes des objets chiers. On supposera qu'un objet chier appel
(1) Pour lire le contenu d'un chier, appeler
f a dj t cr.
>>> f.read()
(2)
f.readline()
>>> f . readline ()
Ceci est la premire ligne du fichier .\ n
>>> f . readline ()
Deuxime ligne du fichier \ n
>>> f . readline ()
(3)
>>> f . readlines ()
[ Ceci est la premire ligne du fichier .\n , Deuxime ligne du fichier \n]
(4) Une approche alternative est de boucler sur l'objet chier.
f.write(chaine)
None.
19
Janvier 2010
(6)
Python
f.tell()
Pierre Puiseux
f.seek(decalage,point_depart).
decalage
un point de rfrence ; le point de rfrence est choisi par l'argument point_depart.
Une valeur de 0 pour point_depart fait dmarrer au dbut du chier, 1 utilise la
position courante du chier, et 2 utilise la n de chier comme point de rfrence.
point_depart peut tre omis et prend alors 0 pour valeur par dfaut comme point de
La position est calcule en ajoutant
rfrence.
>>>
>>>
>>>
>>>
5
>>>
>>>
d
(8) Appeler
f.close()
pour le fermer.
>>> f. close ()
>>> f. read ()
Les objets chier ont quelques mthodes supplmentaires, telles que
isatty() et truncate()
qui sont moins frquemment utilises ; consultez la Library Reference pour un guide complet
des objets chier.
3.2.5. Le module
pickle.
int(),float()...
read()
renvoie une
Pour sauvegarder des types de donnes complexes (listes, dictionnaires, ...) : le module
standard appel
ling .
>>> x = pickle.load(f)
UPPA
20
Janvier 2010
Python
Pierre Puiseux
3.3. ... les listes. Le type de donnes liste possde dautres mthodes. Voici toutes les mthodes des objets listes :
pop([i])
a.pop()
supprim de la liste.
index(x)
x.
Il y a
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
UPPA
21
Janvier 2010
Python
Pierre Puiseux
3.3.1. Utiliser les listes comme des piles. Les mthodes des listes rendent trs facile lutilisation
d'une liste comme une pile, o le dernier lment ajout est le premier lment rcupr
(LIFO, last-in, rst-out ). Pour ajouter un lment au sommet de la pile, utilisez la mthode
append(). Pour rcuprer un lment du sommet de la pile, utilisez pop() sans indice explicite.
Example.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
pile = [3 , 4, 5]
pile . append (6)
pile . append (7)
pile . pop ()
pile . pop ()
pile . pop ()
pile
3.3.2. Utiliser les listes comme des les. Vous pouvez aussi utiliser facilement une liste comme
une le, o le premier lment ajout est le premier lment retir (FIFO, rst-in, rst-out ).
Pour ajouter un lment la n de la le, utiliser
append().
Example.
>>>
>>>
>>>
>>>
>>>
>>>
3.3.3. List Comprehensions. Les list comprehensions fournissent une faon concise de crer
des listes.
vec , vec1 =
[3* x for x
[3* x for x
[ v [0]* v [1]
3.3.4. l'instruction
del.
[2 , 4 , 6] ,[8 ,9 ,12]
in vec ]
in vec if x > 3]
for v in zip ( vec , vec1 )]
del.
dans une liste (ce que l'on a fait prcdemment par remplacement de la tranche par une liste
vide). Par exemple :
22
Janvier 2010
Python
Pierre Puiseux
del peut aussi tre utilis pour supprimer des variables compltes :
>>> del a
3.4. ... les tuples et squences. Un tuple consiste en un ensemble de valeurs spares par
des virgules, par exemple :
>>> u = t , (1 , 2, 3 , 4 , 5)
>>> u
Les tuples sont toujours entre parenthses.
l'instruction
ing) : les valeurs
t = 12345, 54321, 'salut !' est un exemple d'emballage en tuple (tuple pack12345, 54321 et ' salut ! ' sont emballes ensemble dans un tuple. l'opration
>>> x, y, z = t
3.5. ... les ensembles. Python comporte galement un type de donnes pour reprsenter
des ensembles. Un set est une collection (non range) sans lments dupliqus. Les emplois
basiques sont le test d'appartenance et l'limination des entre dupliques. Les objets ensembles supportent les oprations mathmatiques comme l'union, l'intersection, la dirence et la
dirence symtrique. Voici une dmonstration succincte :
>>>
>>>
>>>
>>>
>>>
>>>
>>>
a
b
a
a
a
a
a
b
b
b
b
3.6. ... les dictionnaires. Un autre type de donnes intgr Python est le dictionnaire. Les
dictionnaires sont indexs par des cls, qui peuvent tre de n'importe quel type non-modiable.
Les chanes et les nombres peuvent toujours tre des cls.
Il est prfrable de considrer les dictionnaires comme des ensembles non ordonns de couples (cl : valeur), avec la contrainte que les cls soient uniques ( l'intrieur d'un mme
dictionnaire).
Un couple d'accolades cre un dictionnaire vide :
{}.
Placer une liste de couples cl : valeur spars par des virgules l'intrieur des accolades
ajoute les couples initiaux (cl : valeur) au dictionnaire ; c'est aussi de cette faon que les
dictionnaires sont achs. Les oprations principales sur un dictionnaire sont :
B
B
UPPA
23
Janvier 2010
Python
Pierre Puiseux
La mthode
del.
keys() d'un objet de type dictionnaire retourne une liste de toutes les cls utilises
dans le dictionnaire, dans un ordre quelconque (si vous voulez qu'elle soit trie, appliquez juste
la mthode
sort() la liste des cls). Pour savoir si une cl particulire est dans le dictionnaire,
has_key() du dictionnaire.
utilisez la mthode
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
Le constructeur
dict()
cl-valeur ranges comme des n-uplets. Lorsque les paires forment un motif, les list list comprehensions peuvent spcier de manire compacte la liste de cls-valeurs.
>>> dict ([( ' s a p e ' , 4139) , ( ' g u i d o ' , 4127) , ( ' j a c k ' , 4098)])
>>> dict ([( x , x **2) for x in (2 , 4, 6)]) # use a list comprehension
Plus loin dans ce tutoriel nous tudierons les expressions gnrateurs qui sont l'outil idal
pour fournir des paires cl-valeur au constructeur
dict().
chanes il est parfois plus simple de spcier les paires en utilisant des arguments mot-cl :
Lorsqu'on boucle sur un dictionnaire, les cls et les valeurs correspondantes peuvent tre
obtenues en mme temps en utilisant la mthode
iteritems()
>>> knights = { ' g a l l a h a d ' : ' t h e p u r e ' , ' r o b i n ' : ' t h e b r a v e ' }
>>> for k , v in knights . iteritems () : print k , v
gallahad the pure
robin the brave
B
Lorsqu'on boucle sur une squence, l'indice donnant la position et la valeur correspondante peuvent tre obtenus en mme temps en utilisant la fonction
UPPA
24
enumerate().
Janvier 2010
Python
Pierre Puiseux
>>> for i , v in enumerate ([ ' t i c ' , ' t a c ' , ' t o e ' ]): print i , v
est prfrable :
Pour boucler sur deux squences, ou plus, en mme temps, les lments peuvent tre
apparis avec la fonction
>>>
>>>
>>>
...
...
B
zip().
Pour boucler l'envers sur une squence, spciez d'abord la squence l'endroit, ensuite
appelez la fonction
reversed().
Pour boucler sur une squence comme si elle tait trie, utilisez la fonction
sorted() qui
while
et
if
peuvent
>>>
>>>
>>>
>>>
>>>
>>>
is
et
is not
in
et
not
a =[1 ,2 ,3]
b= a
a is b
1 in a
b= a [:]
b is a
Tous les oprateurs de comparaison ont la mme priorit, qui est plus faible que celle de tous les
oprateurs numriques. Les comparaisons peuvent tre enchanes. Par exemple,
teste si
et de plus si
est gal
c.
a < b == c
UPPA
25
Janvier 2010
Python
Exemple, si
Pierre Puiseux
A et C sont vrais mais que B est faux, A and B and C n'value pas l'expression
C. Il est possible d'aecter le rsultat d'une comparaison ou une autre expression Boolenne
une variable. Par exemple,
>>> chaine1 , chaine2 , chaine3 = , ' T r o n d h e i m ' , ' Hammer Dance '
>>> non_null = chaine1 or chaine2 or chaine3
>>> non_null
Notez qu'en Python, au contraire du C, les aectations ne peuvent pas tre eectues l'intrieur des expressions. Les programmeurs C ronchonneront peut-tre, mais cela vite une
classe de problmes qu'on rencontre dans les programmes C : crire
alors qu'il fallait
==.
sinon
3.9. ... les modules. Un module peut contenir des instructions excutables aussi bien que
des dnitions de fonction.
Chaque module a sa propre table de symboles prive.
Vous pouvez accder aux variables globales d'un module avec la mme notation que celle
employe pour se rfrer ses fonctions,
nommodule.nomelem.
>>>
>>>
>>>
>>>
bo.py
et testez le instructions
Il y a une variante pour importer tous les noms qu'un module dnit :
B
B
B
spam.py
spam
PYTHONPATH.
UNIX, c'est habituelle-
/usr/local/lib/python.
En fait, les modules sont recherchs dans la liste de rpertoires donne par la variable
sys.path
.
Exercise 7. Consultez la liste des rpertoires dans lesquels l'interprteur recherche les mod-
UPPA
26
Janvier 2010
Python
Pierre Puiseux
3.9.2. Fichiers compils de Python. Pour acclrer le temps de lancement, si un chier appel
spam.pyc existe dans le rpertoire o spam.py se trouve, il est suppos contenir une version du
module spam dj compile en byte-code . L'heure de modication de la version de spam.py
employe pour crer spam.pyc est enregistre dans spam.pyc, et le chier est ignor si ceux-ci
ne s'accordent pas.
spam.py est compil avec succs, une tentative est faite pour crire la
spam.pyc.
Le contenu du chier spam.pyc est indpendant de la plate-forme, ainsi un rpertoire de
module de Python peut tre partag par des machines d'architectures direntes.
Toutes les fois que
3.9.3. Modules standard. Python est livr avec une bibliothque de modules standard, dcrite
dans un document spar, Python Library Reference ( Library Reference ci-aprs).
3.10. ... les fonctions builtins.
la fonction
dir()
Sans arguments,
>>>
>>>
>>>
>>>
I
dir()
a = [1 , 2, 3, 4, 5]
import fibo , sys
fib = fibo . fib
dir ()
Notez qu'elle numre tous les types de noms : les variables, les modules, les fonc-
dir() n'numre pas les noms des fonctions et des variables intgres. Si
vous en voulez une liste, elles sont dnies dans le module standard __builtin__ :
tions, etc.
la fonction
La fonction
len(obj)
quit() :
locals() : retourne
exec(string)
Permet d'excuter une instruction Python sous forme de chane de caractres. Par
exemple :
>>>
>>>
>>>
>>>
[1 ,
UPPA
pi = 3.14
todo = ' L = [ 1 , 3 , p i ] '
exec ( todo )
L
3, 3.1400000000000001]
27
Janvier 2010
Python
Pierre Puiseux
B assert(condition)
Pour dclencher une exception si la condition est fausse
>>> import os
>>> filename = ' t o t o . t x t '
>>> assert ( os . path . isfile ( filename ))
donne le mme rsultat que
B
B
B
B
L[42] ?
__builtins__
__builtins__
sum
3.11. ... les paquetages. Les paquetages sont un moyen de structurer l'espace des noms de
modules
Python
A.
A.B
dans un module
3.12. ...Les exceptions. Lorsqu'un erreur d'excution survient, une exception est leve. Le
programme stoppe, et Python ache la pile d'appels, et l'exception.
Il est possible d'crire des programmes qui prennent en charge des exceptions spciques.
Regardez l'exemple suivant, qui interroge l'utilisateur jusqu' ce qu'un entier valide ait t
saisi, mais lui permet d'interrompre le programme en utilisant
Control-C
binaison de touches reconnue par le systme d'exploitation (il faut savoir qu'une interruption
produite par l'utilisateur est signale en levant l'exception
KeyboardInterrupt).
while 1:
try :
x = int ( raw_input (u " V e u i l l e z e n t r e r un nombre : " ))
break
except ValueError :
print u " A e ! Ce n ' t a i t p a s un nombre v a l i d e . E s s a y e z e n c o r e . . . "
Fonctionnement :
La clause
try
try est ignor. Puis si son type correexcept, la clause except est excute, puis
try.
Si une exception se produit qui ne correspond pas l'exception donne dans la clause
except,
L'instruction
raise
try
extrieures.
Par exemple :
UPPA
28
Janvier 2010
Python
Pierre Puiseux
raise
ValueError
B
B
B
B
B
KeyError
Chercher une valeur non-existante dans une liste dclenche une exceptionValueError.
AttributeError.
NameError.
une exception TypeError.
>>> 2/0
un indice hors tableau :
>>> a=[]
>>> a[2]
assigner une valeur un item dans un tuple :
>>> tuple=(1,2,3,4)
>>> tuple[3]=45
3.13. Exercices.
Exercise 10. crire une expression qui vaut
True
False
dans le cas
contraire.
3.14
en un ottant.
a= ' 1.0 3.14 7 8.4 0.0 ' . Ecrire une instruction unique
float() et split(), qui construit la liste de rels [1.0, 3.14, 7.0, 8.4, 0.0]
a.
C=" (1.0, 2.0) (3, 4)n". Trouver une suite d'instrucx=1+2j et y=3+4j. On pourra par
UPPA
29
Janvier 2010
Python
(1) Nettoyer
(2) Remplacer
'n'
de son
', '
par
(mthode
'('
et
Pierre Puiseux
')'
de chaque terme
1+2j
et
3+4j
C[0]
et
C[1]
B
B
humour.txt,
demander l'utilisateur un nom de chier, le lire et recopier son contenu, avec fer
HUMOUR.txt.
rilex.py
un chier dont le nom est pass en argument. La richesse lexicale d'un texte est dnie comme
le quotient entre le nombre de mots dirents et le nombre total de mots du texte. Dans cet
exercice, on dnit la notion de "mot" comme toute squence de taille suprieure ou gale
quatre, forme exclusivement de caractres alphabtiques (on ne distinguera pas les majuscules
des minuscules). Pour l'implmentation, on utilisera la structure native de dictionnaire fournie
par le langage Python.
Exercise 17.
octave.
d,
Les cls sont les noms des variables et les lments sont les valeurs
UPPA
30
vars.oct.
Janvier 2010
Python
Pierre Puiseux
Exercise 18. On donne une liste de d'articles et la liste des prix correspondants. crire une
>>> articles = [ ' m o u s q u e t o n ' , ' r e v e r s o ' , ' c r o c h e t ' , ' b a u d r i e r ' , ' c h a u s s
>>> prix =[5 ,25 ,5 ,80 ,120 ,2]
produira l'achage
mousqueton : 5
reverso : 25
crochet : 5
baudrier : 80
chausson : 120
magnesie : 2
Exercise 19.
matplotlib ?
qui renvoit
UPPA
True
si le chier existe,
False
isFile(fichier)
sinon
31
Janvier 2010
Python
Pierre Puiseux
4. programmation
spe.
idle,
nements.
ouvrir un
ouvrir
$ python
refox et la doc
Python
UPPA
32
Janvier 2010
Python
Pierre Puiseux
http://fr.wikipedia.org/
Python
coutume, taper ? ou
help
pdb
Il
depuis le
shell
gramme
oct2dic_bug.py
4.2. Fonctions
Python,
dtails.
fibo.py,
def
dbute la dnition d'une fonction. Il doit tre suivi par le nom de la fonction
UPPA
33
Janvier 2010
Python
Pierre Puiseux
L'excution d'une fonction gnre une nouvelle table de symboles, utilise pour les variables
locales de la fonction.
On ne peut pas aecter directement une valeur aux variables globales l'intrieur d'une
fonction ( moins de les dclarer avec une instruction
global),
rfrence.
Les vrais paramtres (arguments) d'un appel de fonction sont introduits dans la table de
symboles locale de la fonction appele quand elle est appele ; ainsi, les arguments sont passs
en utilisant un passage par valeur.
Un fonction est un objet Python comme un autre. Il est possible de renommer une fonction :
fib malgr les apparences, retourne une valeur, bien quelle soit plutt dcevante.
None (c'est un nom intgr).
def fib2 ( n ):
" " " R e t o u r n e une l i s t c o n t e n a n t
l a s r i e de F i b o n a c c i j u s q u n " " "
resultat = []
a , b = 0, 1
while b < n:
resultat . append (b) # voir ci - dessous
a , b = b , a+b
return resultat
if __name__ == '__main__ ' :
fib2 (100)
Cet exemple dmontre quelques nouvelles caractristiques de Python :
l'instruction
en renvoyant la valeur
mthode de l'objet
a.
Sans argument,
result.
En program-
mation objet, une mthode est une fonction qui appartient un objet et est nomme
obj.nommethode
UPPA
34
Janvier 2010
Python
Vous pouvez dnir vos propres types d'objets et mthodes, en utilisant des classes, cf
plus bas. La mthode
type
Pierre Puiseux
list ;
append()
L'instruction
def
Exercise 23. Crer une fonction qui prend en argument deux listes et qui renvoit l'intersection
La premire ligne devrait toujours tre un rsum concis des objectifs de l'objet, devrait
toujours commencer par une lettre majuscule et nir par une virgule.
S'il y a d'autres lignes dans la chane de documentation, la deuxime ligne devrait tre
vide, sparant visuellement le rsum du reste de la description.
Les lignes suivantes devraient constituer un ou plusieurs paragraphes dcrivant les conventions d'appel des objets, ses eets de bord, etc.
Non , v r a i m e n t , e l l e ne f a i t r i e n .
"""
pass
if __name__ == '__main__ '
print ma_fonction . __doc__
UPPA
35
Janvier 2010
Python
Pierre Puiseux
help
suivant.
Variable
>>>
...
...
>>>
>>>
>>>
1
B
non globale
def f ():
x =12
x =1
f ()
x
Variable
>>>
...
...
...
>>>
>>>
>>>
12
globale
def f ():
global x
x =12
x =0
f ()
x
Les arguments sont passs aux fonctions par aectation, ce qui signie que les arguments
sont simplement aects des noms locaux ( la fonction).
Les arguments modiables se comportent comme des arguments passs par adresse
en C, et ne sont bien sr pas recopis non plus.
UPPA
36
Janvier 2010
Python
Pierre Puiseux
Attention aux eets de bord : l'aectation (comme le passage d'argument) cre une
rfrence sur la valeur aecte (sur l'argument) et non pas une copie profonde.
UPPA
37
Janvier 2010
Python
Pierre Puiseux
4.2.5. Valeurs d'argument par dfaut. La technique la plus utile consiste spcier une valeur
par dfaut pour un ou plusieurs arguments. Cela cre une fonction qui peut tre appele avec
moins d'arguments qu'il n'en a t dni.
>>> interrogatoire('Puiseux')
ou comme ceci :
motcle = valeur.
os.
B os.walk
os, os.path.
4.3.1.
>>> import os
>>> for root , dirs , files in os . walk ( ' . ' ) :
...
print " L i s t e d e s f i c h i e r s du r e p e r t o i r e : %s => %s " \
%( root , files )
B os.system(cmd)
cmd (string)
38
Janvier 2010
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
Python
Pierre Puiseux
I getatime(fichier)
I getsize(fichier)
isabs(chemin) le chemin est-il absolu ?
isdir(chemin) est-ce un rpertoire existant ?
isfile(chemin) un chier ?
islink(chemin) un lien ?
ismount(chemin) le chemin est-il un point de montage ?
join os.path.join('devel','toto.cxx ' ) devel/toto.cxx
split os.path.split('devel/toto.cxx')( ' devel ' , ' toto . cxx ' )
splitext os.path.splitext('devel/toto.cxx')( ' devel /toto ' , ' . cxx ' )
os.path
os.path,
(2) Lister rcursivement l'adresse absolue de tous les chiers .py et .txt qui s'y trouvent.
(3)
4.4. Le module
Unix, le module
section
14.3
tests.py,
39
Janvier 2010
Python
Pierre Puiseux
opts est le dictionnaire opts={'leoutname ' :None} parmi les options disponibles
tests.py, l'option -o (option longue --output) sera utilise pour prciser
le nom du chier d'entre, qui sera aect dans le script l'attribut parser.fileoutname, la
chane de caractres help=" ... " est utilise pour documenter le script lors d'un appel
alors la variable
pour l'excution de
$ toto.py -h
Exercise 26. Excutez le script
$
$
$
$
$
options.py
options.py
options.py
options.py
options.py
options.py
-h
--out=filout -c -v filin
-o filout -c filin
-w
--out=filout
Notez la dirence entre options avec valeurs (-o) et options sans valeur (-h,
4.5.
Python
-v)
UPPA
paraview,
40
Janvier 2010
Python
Python nomm
pilote.py,
Pierre Puiseux
pylote_incomplet.py.
l'argument
I
I
I
B
les donnes et
les rsultats aprs simulation
L'option
UPPA
session
le chier de donnes
-v
41
paraview
est lanc.
Janvier 2010
Python
Pierre Puiseux
Python
(1) Un espace de noms (name space) est une relation entre des noms et des objets. Par
exemple
(a) l'ensemble des noms intgrs (les fonctions telles que
abs(),
tion intgrs) ;
(b) les noms globaux dans un module ;
(c) les noms locaux au cours d'un appel de fonction.
il n'y a absolument aucune relation entre les noms contenus dans les dirents espaces de noms
par exemple, deux modules dirents peuvent dnir tous les deux une fonction
maximise sans confusion possible les utilisateurs des modules doivent prxer par
le nom du module l'utilisation.
__builtin__
__main__,
L'espace de noms local une fonction est cr quand celle-ci est appele et il est
eac quand la fonction se termine
(2) Une porte (scope ) est une rgion textuelle d'un programme Python dans laquelle un
espace de noms est directement accessible.
A n'importe quel moment de l'excution, exactement trois portes imbriques sont
utilises (exactement trois espaces de noms sont accessibles directement) :
(a) la porte immdiate, qui est explore en premier, contient les noms locaux,
(b) la porte intermdiaire, explore ensuite, contient les noms globaux du module
courant, et
(c) la porte extrieure (explore en dernier) correspond l'espace de noms contenant
les noms intgrs.
Si un nom est dclar
global
UPPA
42
Janvier 2010
Python
Pierre Puiseux
5. Les classes en
Le mcanisme de classe en
Python
python
B
B
B
B
B
B
il n'y a pas de raccourcis pour faire rfrence aux membres d'un objet partir de ses
mthodes : une mthode est dclare avec un premier argument explicite (self le plus
souvent) qui reprsente l'objet, qui est fourni implicitement l'appel.
les classes sont elles-mmes des objets, mais dans un sens plus large : en Python, tous
les types de donnes sont des objets. Cela fournit la smantique pour l'importation et le
renommage.
les types intgrs ne peuvent pas tre utiliss comme classes de base pour des extensions
par l'utilisateur.
la plupart des oprateurs intgrs qui ont une syntaxe particulire (oprateurs arithmtiques, indiage, etc.) peuvent tre rednis pour des instances de classe.
UPPA
43
Janvier 2010
Python
Pierre Puiseux
5.1. Une premire approche des classes. Les classes introduisent un peu de syntaxe
nouvelle et quelques points de smantique supplmentaires.
Syntaxe de la dnition de classe. La forme la plus simple de dnition de classe ressemble
ceci :
class NomClasse:
<instruction-1>
.
.
.
<instruction-N>
5.1.1. Une classe
5
6
7
8
9
10
11
12
Complexe
: dclaration.
class Complexe :
" " " Une c l a s s e c o m p l e x e s o m m a i r e " " "
def __init__ ( self , re =0.0 , im =0.0):
self . _x , self . _y = re , im
def arg ( self ):
return atan2 ( self ._x , self . _y )
16
if __name__ == "__main__" :
z0 = Complexe (1 ,2)
print z0 . _x , z0 . _y
print z0 . arg ()
(1)
class
13
14
15
Complexe
Complexe
__init__
guments sont
(a)
self
re
self
est un
Complexe,
self,
lorsque un
Complexe,
0.0
et
0.0)
prendront corps en
prendra la valeur
De manire analogue, au moment de la dnition d'une fonction (par exemple def f(x) : return x*x)
aucune variable, mais prendra corps seulement lorsque la fonction sera appele par exemple
x ne dsigne
a=3;f(a).
UPPA
44
Janvier 2010
Python
Complexe
5.1.2.
Pierre Puiseux
: instanciation. l'instruction :
z0 = Complexe (1 ,2)
dclenche les actions suivantes :
appel
Complexe.__init__(1,2) , = z0
z0.
z0._x, z0._y
Complexe :
utilisation.
print z0 . _x , z0 . _y
print z0 . arg ()
B z0._x et z0._y valent 1 et 2. Il serait commode d'avoir un instruction print z0
B z0.arg()<==>Complexe.arg(z0) dans la mthode Complexe.arg(self), self vaut z0
Plus gnralement si uneMethode(a) est une mthode de la classe MaClasse, et si X est un
objet de type MaClasse, alors
X.uneMethode(a) MaClasse.uneMethode(X,a)
Exercise 28. Ecrire la mthode
abs()
de la classe
Complexe
5.2. Mthodes spciales. Les mthodes spciales commencent et nissent par __ (deux
underscores '_'). Elles sont hrites de la classe
object.
z=z1+z2 z=z1.__add__(z2)
Les principales mthodes que l'on peut surcharger pour une classe donne sont :
Mthode de la classe surcharger
utilisation
object.__add__(self, other)
self+other
object.__sub__(self, other)
self-other
object.__mul__(self, other)
self+other
object.__and__(self, other)
self and other
object.__or__(self, other)
self or other
object.__len__(self)
len(self)
object.__getitem__(i)
x=self[i]
object.__setitem__(i)
self[i]=y
object.__call__(self[, args...])
self(args)
object.__str__()
print self
object.__repr__()
self
__str__() dans la classe Complexe
self. Testez ensuite les instructions
, an qu'elle
UPPA
45
Janvier 2010
Python
Pierre Puiseux
__add__()
et une mthode
__mul__()
. Testez l'instruction
class Complexe(object):
signie que la classe
Donc
Complexe
Complexe
EST est un
hrite de la classe
object
object
de Python.
Complexe.
object
peuvent tre
5.3.1. Hritage ou pas ? On utilise un hritage lorsque l'hritier EST un parent, comme dans
une liation de famille ordinaire. Le ls Dupond est un Dupont.
La bonne question se poser pour dcider si B doit hriter de A est :
B is A ou bien B has A ?
B
B
Cercle
s'crira :
Polygone,
comme celle-ci,
46
Janvier 2010
Python
Triangle
Pierre Puiseux
comme ceci :
Polygone.__str__
Triangle.__str__
surcharge celle
5.3.5. Hritage multiple. Python supporte aussi une forme limite d'hritage multiple. Une
dnition de classe avec plusieurs classes de base ressemble :
Base2,
et ainsi de suite.
= utiliser
Autrement dit, les classes ne sont pas utilisables pour implmenter des types abstraits purs.
Par convention, le premier argument d'une mthode est souvent appel
self.
Les mthodes peuvent appeler d'autres mthodes en utilisant les attributs mthodes de
l'argument
UPPA
self
47
Janvier 2010
Python
Pierre Puiseux
class Sac :
def vider ( self ):
self . donnees = []
def ajouter ( self , x ):
self . donnees . append (x )
def ajouterdoublon ( self , x ):
self . ajouter (x)
self . ajouter (x)
Les mthodes peuvent faire rfrence des noms globaux de la mme faon que les fonctions
ordinaires. La porte globale associe une mthode est celle du module qui contient la
dnition de la classe. (La classe elle-mme ne sert jamais de porte globale !)
5.5. Objets en rapport avec les classes.
5.5.1. Objets classes. Les objets classe admettent deux sortes d'oprations : la rfrenciation
des attributs et l'instanciation.
Les rfrences aux attributs (attribute references ) utilisent la syntaxe standard utilise
pour toutes les rfrences d'attribut en Python :
obj.nom.
class MaClasse :
u " " " Une c l a s s e s i m p l e p o u r e x e m p l e " " "
i = 12345
def f( self ):
return u " B o n j o u r t o u t l ' monde "
alors
MaClasse.i
et
MaClasse.f
MaClasse.i = 12
et
MaClasse.f = g
tations valides.
__doc__
la classe.
x = MaClasse()
cre une nouvelle instance de la classe et aecte cet objet la variable locale
Une classe peut dnir une mthode spciale nomme
__init__(),
x.
comme ceci :
__init__()
__init__().
Par exemple,
UPPA
48
Janvier 2010
Python
Pierre Puiseux
class Complexe :
def __init__ ( self , partiereelle , partieimaginaire ):
self . r = partiereelle
self . i = partieimaginaire
z = Complexe (3.0 , -4.5)
print z.r , z .i
5.5.2. Objets instances. Que peut-on faire avec les objets instances ? Les seules oprations
acceptes par des objets instance sont des rfrences leurs attributs. Il y a deux sortes de
noms d'attributs valides.
(1) J'appellerai la premire donnes attributs (data attributes ). Ils correspondent aux
donnes membres (data members ) en C++. Les donnes attributs n'ont pas besoin
d'tre dclares ; comme les variables locales, elles apparaissent lorsqu'on leur aecte
une valeur pour la premire fois. Par exemple, si
MaClasse cre
16, sans laisser de trace :
est l'instance de
x. compteur = 1
while x. compteur < 10:
x. compteur = x. compteur * 2
print x. compteur
del x. compteur
(2) La seconde sorte de rfrence d'attribut accepte par les objets instance sont les mth-
odes (methods ). Une mthode est une fonction qui appartient un objet.
5.5.3. Objets mthodes. D'habitude, une mthode est appele de faon directe :
x.f()
Dans notre exemple, cela renverrait la chane
L'objet
x.f
est un
objet mthode, il peut tre rang quelque part et tre appel plus tard, par exemple :
xf = x. f
while 1:
print xf ()
continuera acher
La particularit des mthodes est que l'objet est pass comme premier argument la fonction.
Dans notre exemple, l'appel
x.f()
MaClasse.f(x)
5.6. Variables prives. Il y a un support limit pour des identicateurs privs dans une
classe. Tout identicateur de la forme
__spam
nomclasse
UPPA
_nomclasse__spam
, o
49
Janvier 2010
Python
Pierre Puiseux
5.6.1. Itrateurs. Vous avez probablement remarqu que la plupart des conteneurs peuvent
B
B
l'instruction
for
appelle
iter()
for
iter()
next()
StopIteration
qui dit la
de se terminer.
self
UPPA
50
Janvier 2010
Python
Pierre Puiseux
class Reverse :
""" I t e r a t o r f o r l o o p i n g over a sequence backwards """
def __init__ ( self , data ):
self . data = data
self . index = len ( data )
def __iter__ ( self ):
return self
def next ( self ):
if self . index == 0:
raise StopIteration
self . index = self . index - 1
return self . data [ self . index ]
>>> for char in Reverse ( ' spam ' ):
... print char
...
m
a
p
s
5.6.2. Gnrateurs.
5.6.3. Expressions gnrateurs.
5.7.
property.
Une
property
en C++ des getters et des setters, avec une vrication de type si ncessaire, mais avec
une syntaxe lgre pour l'utilisateur.
UPPA
51
Janvier 2010
Python
Pierre Puiseux
property est :
property(fget=None, fset=None, fdel=None, doc=None)
fget est la mthode getter de l'attribut
fset le setter
fdel est le destructeur de l'attribut
doc est une chane de caractres contenant la documentation de
La signature de
B
B
B
B
Complexe
l'attribut
UPPA
52
Janvier 2010
Python
Pierre Puiseux
5.8. Dcorateurs. Un dcorateur python est une fonction qui prend en paramtre une autre
fonction, pour la modier, lui ajouter des fonctionnalits, la substituer ou simplement excuter
un travail avant ou aprs l'avoir appell.
Un dcorateur est caractris par le mot cl
decorate().
53
Janvier 2010
Python
Pierre Puiseux
5.10. Exercices.
dont la fonction
la classe
list,
ou
l est une
complex
liste
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
Complexe
object
, et qui
sur le type et
54
Janvier 2010
Python
Pierre Puiseux
Exercise 40. Dcorateur pour vrication de type. Prvoir le comportement des instructions
suivantes :
TypeError
f,
est de type
float
f,
quer le
Ecrire un dcorateur
Majuscule,
appli-
de sorte que :
HELLO
UPPA
55
Janvier 2010
Python
Pierre Puiseux
Rfrences
[LA] Mark Lutz, David Ascher, Introduction Python, ed O'Reilly, Janvier 2000, ISBN 2-84177-089-3
[HPL] Hans
Petter
Langtangen,
Python
Scripting
for
Computational
Science.
Simula
Research
Laboratory
and
Department
of
Informatics
University
of
Oslo.
/home/puiseux/enseignement/CoursOutilsInformatiques/Python_scripting_for_computational_science.04.pdf
[MP] Mark Pilgrim, dive into Python (Plongez au coeur de Python) http ://diveintopython.org/, traduction franaise : Xavier Defrang, Jean-Pierre Gay, Alexandre Drahon.
/home/puiseux/doc/python/frdiveintopython.pdf
UPPA
56
Index
court-circuit
, 25
docstring, 33
None, 34
packing, 23
unpacking, 23
57