Instruction yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Instruction global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Instruction nonlocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Instruction import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Instruction from . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Instruction class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Instruction try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Instruction raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Instruction assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Instruction with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Instructions Python 2.X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Espace de noms et règles de portée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Noms qualifiés : espaces de noms d’objets . . . . . . . . . . . . . . . . . . . . . . . . 108
Noms non qualifiées : portées lexicales . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Portées imbriquées et closures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Programmation orientée objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Classes et instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Attributs pseudoprivés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Nouvelles classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Règles d’héritage formelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Méthodes de surchargement d’opérateur . . . . . . . . . . . . . . . . . . . . . . . . . 120
Méthodes pour tous les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Méthodes pour les collections (séquences, mappings) . . . . . . . . . . . . . . . 127
Méthodes pour les nombres (opérateurs binaires) . . . . . . . . . . . . . . . . . . 129
Méthodes pour les nombres (autres opérations) . . . . . . . . . . . . . . . . . . . . 132
Méthodes pour les descripteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Méthodes pour gestionnaires de contextes . . . . . . . . . . . . . . . . . . . . . . . . . 133
Méthodes de surchargement d’opérateur Python 2.X . . . . . . . . . . . . . . . 134
VI Python
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
1
Python précis et concis
INTRODUCTION
Python est un langage de programmation générique, open source,
prenant en charge plusieurs modèles de programmation (procédural,
fonctionnel et orienté objet). On l’utilise aussi bien pour créer des
programmes autonomes que des scripts dans une grande variété de
domaines, et on estime que c’est l’un des langages de programmation
les plus utilisés au monde.
La lisibilité du code, la fonctionnalité de ses librairies1 , une
conception qui optimise la productivité du développeur, la qualité
logicielle, la portabilité des programmes, et l’intégration des compo-
sants sont les principales caractéristiques de Python. Python peut
CONVENTIONS TYPOGRAPHIQUES
a|b
Dans la syntaxe des instructions, les éléments séparés par
une barre verticale représentent des alternatives ; la barre est
parfois utilisée de manière littérale dans Python (par exemple,
l’union).
Italique
Utilisé pour les noms de fichiers et les URL, ou pour mettre en
évidence des termes nouveaux ou importants.
Police à chasse fixe
Utilisée pour le code, les commandes et les options de lignes
de commande ; sert également à indiquer les noms de modules,
de fonctions, d’attributs, de variables et de méthodes.
Police à chasse fixe en italique
Utilisée pour les noms des paramètres remplaçables au sein
d’une ligne de commande, d’une expression, d’une fonction ou
d’une méthode.
Fonction()
Sauf indication contraire, les fonctions et méthodes suscep-
tibles d’être invoquées sont suffixées d’une paire de parenthèses
pour les différencier d’autres types d’attributs.
Voir Nom de section
Les références aux autres sections de cet ouvrage sont indiquées
par des titres de sections en italique.
Note
Dans ce livre, la mention « 3.X » et « 2.X » signifie que le sujet
traité s’applique à toutes les versions de Python couramment
utilisées. Quand un numéro précis de version est spécifié, cela
indique une portée plus limitée (par exemple, « 2.7 » signifie
que cela ne s’applique qu’à la version 2.7). Dans la mesure où
de futures modifications du langage Python peuvent invalider le
contenu de cet ouvrage, il est prudent de se reporter aux notes de
version « What’s New » qui renseignent sur les nouveautés des
versions de Python publiées après la sortie de ce livre et que l’on
peut trouver en ligne à :
http://docs.python.org/3/whatsnew/index.html
4 Chapitre 1. Python précis et concis
python [option*]
[fichier de script| -c commande | -m module | - ] [arg*]
-X option
Définit une option spécifique à une implémentation de Python
(à partir de Python 3.2) ; voir la documentation spécifique de
l’implémentation pour les valeurs de l’option.
arg*
Signale que tout autre élément de la ligne de commande est
passé au fichier de script ou à la commande, et apparaît dans la
liste des chaînes sys.argv[1:].
-3
Émet des avertissements pour toute incompatibilité Python
3.X dans le code que l’utilitaire 2to3, chargé de l’installation
standard de Python, ne peut pas réparer facilement.
-R
Pour lutter contre les attaques par déni de service, les valeurs
de hachage des différents types sont modifiées par un nombre
pseudo-aléatoire, si bien qu’il est impossible de les deviner
entre les invocations successives de l’interpréteur. Cette option
est nouvelle à partir de Python 2.6.8. Ce commutateur est
également présent dans la version 3.X à partir de la version
3.2.3 par souci de compatibilité, mais cette création aléatoire
des valeurs de hachage est activée par défaut depuis la version
3.3.
Variables opérationnelles
Voici les principales variables d’environnement configurables par
l’utilisateur et permettant la modification du comportement des
scripts :
PYTHONPATH
Ajoute au chemin de recherche par défaut celui des fichiers de
modules importés. Le format de la valeur de cette variable est
identique au paramètre PATH du shell : chemins de répertoires
séparés par le caractère deux points (point-virgule sous Win-
dows). Si la variable est définie, les imports de modules lancent
une recherche des fichiers importés dans chaque répertoire
listé dans PYTHONPATH, de la gauche vers la droite. Ils sont
ajoutés à sys.path (le chemin complet de recherche des
modules pour les composants les plus à gauche des imports
absolus) après le répertoire du script, et avant les répertoires
Variables d’environnement de Python 9
#!/usr/bin/env python*
#!/usr/bin/python*
#!/usr/local/bin/python*
#!python*
Opérateur Description
X == Y, X != Y Opérateurs d’égalité
Tableau 1 — (suite)
Opérateur Description
X is Y Objet identique
S1 + S2 Concaténation __add__
S * N, N * S Répétition __mul__
for k in D:, etc. Parcourt toutes les clés de D (tous les Identique au
contextes d’itération) tableau 3
a. En Python 2.X, l’appartenance à la clé peut aussi être codée comme D.has_key(k).
Cette méthode est supprimée en Python 3.X au profit de l’expression in, qui est également
préférée en 2.X. Voir la section « Dictionnaires ».
20 Chapitre 1. Python précis et concis
X ** Y X puissance Y __pow__
a. L’opérateur / invoque __truediv__ en Python 3.X, mais __div__ en Python 2.X, à moins
que la division véritable soit activée. Voir la section « Notes sur l’utilisation des opérateurs »
pour la sémantique de la division.
b. En Python 2.X, la fonction intégrée long() invoque la méthode de classe __long__. En
Python 3.X, le type int incorpore le type long, qui a été supprimé.
Indiçage : S[i]
• Récupère les composants à la position des offsets (le premier
élément est à l’offset 0).
• Les indices négatifs comptent à reculons à partir de la fin (le
dernier élément est à l’offset 1).
• S[0] récupère le premier élément ; S[1] récupère le deuxième
élément.
• S[2] récupère l’avant dernier élément (identique à S[len(S)
2]).
Slicing : S[i:j]
• Extrait des sections contiguës d’une séquence, de i jusqu’à j1.
• Les limites de l’objet slice i et j ont respectivement pour valeur
par défaut 0 et la longueur de la séquence len(S).
• S[1:3] extrait les données de l’offset 1 jusqu’à 3, mais sans
l’inclure.
• S[1:] extrait les données de l’offset 1 jusqu’à la fin (len(S)-1).
• S[:1] extrait les données de l’offset 0 jusqu’au dernier élément,
mais sans l’inclure.
• S[:] crée une copie en mode shallow de l’objet S.
Autre
• La concaténation, la répétition, et le slicing renvoient de
nouveaux objets (ce n’est pas toujours vrai pour les tuples).
Nombres
Les nombres sont des valeurs immutables (non modifiables), qui
prennent en charge des opérations numériques. Cette section traite
des types numériques de base (entier, virgule flottante), ainsi que des
types plus avancés (complexe, décimal, et fraction).
Littéraux et création
Les nombres sont écrits sous différentes formes littérales et créés par
certaines opérations intégrées :
1234, 24, +42, 0
Entiers (précision illimitée).1
1.23, 3.14e-10, 4E210, 4.0e+210, 1., .1
Virgule flottante (normalement implémenté comme le type
double du C en CPython).
Opérations
Les types numériques prennent en charge toutes les opérations numé-
riques (voir le tableau 6). Dans les expressions comportant des types
mixtes, Python convertit les opérandes vers le type « le plus élevé »,
où le type entier est inférieur au type virgule flottante qui est lui-même
inférieur au type complexe. À partir de Python 3.0 et 2.6, les objets de
type entier et virgule flottante ont aussi quelques méthodes spécifiques
à leur type et d’autres attributs ; reportez-vous au manuel de la librairie
de référence de Python pour plus de détails :
1. En Python 2.X, les littéraux octaux peuvent aussi être écrits avec un zéro
en en-tête, 0777 et 0o777 étant équivalents. En 3.X, seule la dernière forme
est prise en charge pour les valeurs octales.
24 Chapitre 1. Python précis et concis
Décimal et fraction
Python fournit deux types numériques supplémentaires dans les
modules de la librairie standard : décimal est un nombre à virgule
flottante avec une précision fixe, et fraction est un type rationnel
qui conserve le numérateur et le dénominateur de façon explicite.
Ces deux types peuvent être utilisés pour régler le problème de
l’imprécision des calculs avec des nombres à virgule flottante :
Chaînes
L’objet string (chaîne) normal str est une séquence immutable (non
modifiable) de caractères auxquels on accède par leur offset (position).
Ses caractères sont représentés par le rang qu’ils occupent dans
l’ensemble des caractères, et chaque caractère individuel est un objet
string de longueur 1.
Le modèle complet de l’objet string varie selon les versions de
Python.
Python 3.X a trois types string avec des interfaces similaires :
str
Une séquence immutable de caractères, utilisée pour tous les
textes (ASCII et Unicode).
bytes
Une séquence immutable d’entiers courts, utilisée pour repré-
senter les octets de données binaires.
bytearray
Une variante mutable du type byte.
Littéraux et création
Les littéraux de type string sont écrits sous la forme d’une série de
caractères entre guillemets, et sont éventuellement précédés d’un
caractère indiquant leur type de données ; une chaîne vide est codée
sous la forme de guillemets qui se suivent. Différentes opérations
intégrées renvoient également une nouvelle chaîne :
’Python"s’, "Python’s"
Les guillemets simples et doubles fonctionnent de la même
manière, et chaque caractère peut incorporer des guillemets de
l’autre type sans séquence d’échappement.
"""Ceci est un bloc multiligne"""
Les blocs encadrés par une suite de trois guillemets rassemblent
plusieurs lignes de texte en une seule chaîne avec des mar-
queurs de fin de ligne (\n) insérés entre les lignes originales
entre guillemets.
’Python\’s\n’
Les séquences de code d’échappement commençant par un
antislash (voir le tableau 7, Constantes chaînes des codes d’échap-
pement) sont remplacées par le code du caractère qu’elles repré-
sentent (par exemple, ’\n’ correspond au caractère ASCII qui
a pour valeur décimale 10).
"Ceci" "est" "concaténé"
Les constantes de chaînes adjacentes sont concaténées. Si
l’on met des parenthèses, cette forme peut tenir sur plusieurs
lignes).
r’chaîne\brute’, R’une\autre’
Chaînes brutes : les antislashs sont interprétés de manière
littérale (sauf s’ils sont à la fin d’une chaîne). Cela est utile
pour les expressions régulières et les chemins de répertoires
sous Windows : par exemple, r’c:\dir1\file’.
hex(), oct(), bin()
Crée des chaînes hexadécimales, octales et binaires à partir
de nombres entiers. Reportez-vous aux sections Nombres et
Fonctions intégrées.
b’...’
Littéraux de chaînes bytes en Python 3.X : il s’agit d’une
séquence de valeurs de 8 bits représentant des données binaires
brutes. Pour des raisons de compatibilité avec 3.X, cette forme
est aussi disponible en Python 2.6 et 2.7, où elle crée sim-
plement une chaîne normale str. Reportez-vous aux sections
Méthodes de chaînes, Chaînes Unicode et Fonctions intégrées.
bytearray(...)
Construction de chaînes bytearray : il s’agit d’une variante
mutable de bytes qui est disponible en Python 3.X, et en
Python 2.X à partir de 2.6. Reportez-vous aux sections
Méthodes de chaînes, Chaînes Unicode et Fonctions intégrées.
u’...’
Littéraux de chaînes Unicode en Python 2.X : il s’agit d’une
séquence de codes Unicode. Par souci de compatibilité avec
2.X, cette forme est aussi disponible en Python 3.X à partir
de 3.3, où elle crée simplement une chaîne normale str (mais
les littéraux normaux et les chaînes str prennent en charge
le texte Unicode en Python 3.X). Reportez-vous à la section
Chaînes Unicode.
str(), bytes(), bytearray() (et unicode() seulement en 2.X)
Création de chaînes à partir d’objets, avec une possibilité d’en-
codage et de codage Unicode en Python 3.X. Reportez-vous à
la section Fonctions intégrées.
Les littéraux de chaînes peuvent contenir des séquences d’échap-
pement issues du tableau 7, Constantes chaînes des codes d’échappement
pour représenter des caractères spéciaux.
Opérations
Tous les types string prennent en charge toutes les opérations sur
les séquences (voir le tableau 3), ainsi que les méthodes spécifiques
aux chaînes (décrites dans la section intitulée Méthodes de chaînes).
De plus, le type str supporte les expressions % de mise en forme de
chaînes et la substitution de modèles (traitée plus loin), et le type
bytearray prend en charge les opérations sur les séquences mutables
(voir le tableau 4, ainsi que quelques méthodes supplémentaires qui
s’apparentent aux traitements des listes). Reportez-vous également
au module de gestion des expressions régulières pour les chaînes
dans la section intitulée Module de recherche de motifs par expressions
28 Chapitre 1. Python précis et concis
%[(keyname)][flags][width][.prec]typecode
typecode
Un caractère issu du tableau 8.
width et prec peuvent être codés avec le caractère * pour que
leur valeur soit obtenue à partir de l’élément suivant dans les valeurs
à droite de l’opérateur % lorsque les tailles ne sont connues qu’au
moment de l’exécution du programme. Astuce : %s convertit généra-
lement n’importe quel type d’objet en sa représentation sous forme
de chaîne.
Tableau 8 — Codes des types de formatage de chaînes pour %
>>> ’{0:,d}’.format(1000000)
’1,000,000’
>>> ’{0:13,.2f}’.format(1000000)
Types intégrés spécifiques 33
’ 1,000,000.00’
>>> ’{0:%} {1:,.2%}’.format(1.23, 1234)
’123.000000% 123,400.00%’
[[fill]align][sign][#][0][width][,][.prec][typecode]
Méthodes de chaînes
Outre la méthode format() décrite plus haut, les méthodes de chaînes
de caractères fournissent des outils de gestion de texte de haut niveau
qui vont au-delà des expressions de chaînes. Le tableau 9 énumère les
méthodes de chaînes disponibles ; dans ce tableau, S représente n’im-
porte quel objet string (techniquement, un str 3.X). Les méthodes
de chaînes qui modifient du texte renvoient toujours une nouvelle
chaîne et ne modifient jamais l’objet lui-même (les chaînes sont des
immutables, c’est-à-dire qu’elles ne sont pas modifiables).
On trouvera plus de détails sur ces méthodes dans les sections
décrivant les fonctions à la suite du tableau ; vous pouvez aussi
exécuter dans la console un help(str.nom_de_méthode). Astuce :
cette liste peut varier en fonction de la version de Python que vous
utilisez ; pour voir la vôtre, saisissez :
S.capitalize()
S.center(width, [, fill])
S.encode([encoding [, errors]])
S.expandtabs([tabsize])
S.format(*args, **kwargs)
S.isalnum()
S.isalpha()
S.isdecimal()
S.isdigit()
S.isidentifier()
S.islower()
S.isnumeric()
S.isprintable()
S.isspace()
S.istitle()
S.isupper()
S.join(iterable)
S.ljust(width [, fill])
S.lower()
38 Chapitre 1. Python précis et concis
Tableau 9 — (suite)
S.lstrip([chars])
S.maketrans(x [, y [, z]])
S.partition(sep)
S.rjust(width [, fill])
S.rpartition(sep)
S.rsplit([sep [, maxsplit]])
S.rstrip([chars])
S.split([sep [, maxsplit]])
S.splitlines([keepends])
S.strip([chars])
S.swapcase()
S.title()
S.translate(map)
S.upper()
S.zfill(width)
À noter :
• str ne prend pas en charge le décodage Unicode (le texte est
déjà décodé), mais il peut être encodé en bytes.
• bytes et bytearray ne prennent pas en charge le décodage
Unicode (ce sont des octets bruts, comprenant du texte déjà
encodé), mais on peut les décoder en str.
• bytes et bytearray ne prennent pas en charge le formatage de
chaîne (implémenté par str.format et les __mod__ et __rmod__
de l’opérateur %).
• bytearray a des méthodes de modification en place supplémen-
taires et des opérateurs semblables à list (exemple : append,
+=).
Note
L’ensemble des méthodes disponibles en Python 2.X varie légère-
ment (par exemple, il existe une méthode decode pour le modèle
de type Unicode spécifique à 2.X). Le type de chaîne unicode
de Python 2.X a une interface quasi identique aux objets str
de 2.X. Pour plus de détails, référez-vous à l’ouvrage Python 2.X
Library Reference, ou exécutez dans une console dir(str) ou
help(str.method).
le résultat est une nouvelle chaîne (les chaînes étant des immutables,
elles ne sont jamais modifiées). On désigne par « espace blanc » les
espaces, les tabulations et les caractères de fin de ligne (tout ce qui se
trouve dans string.whitespace).
Méthodes de recherche
S.find(sub [, start [, end]])
Renvoie l’offset de la première occurrence de la chaîne sub
dans S, entre les offsets start et end (qui sont par défaut
égaux à 0 et len(S), la chaîne entière). Renvoie -1 si aucune
occurrence n’est trouvée. Astuce : voir également l’opérateur
d’appartenance in (dans le tableau 3, Opérations sur les types
séquence (chaînes, listes, tuples, octets, tableaux d’octets)), qui
peut être employé pour tester la présence d’une sous-chaîne
dans une chaîne.
S.rfind(sub [, start [, end]])
Comme find, mais recherche en partant de la fin (de droite à
gauche).
S.index(sub [, start [, end]])
Comme find, mais déclenche une exception ValueError si
aucune occurrence n’est trouvée, au lieu de -1.
S.rindex(sub [, start [, end]])
Comme rfind, mais déclenche une exception ValueError si
aucune occurrence n’est trouvée, au lieu de -1.
S.count(sub [, start [, end]])
Compte le nombre d’occurrences non superposées de sub dans
S, depuis l’offset start jusqu’à end (qui ont pour valeur par
défaut 0 et len(S)).
S.startswith(sub [, start [, end]])
True si la chaîne S commence par la sous-chaîne sub. start
et end sont des options pour définir le départ et la fin de la
recherche de sub.
S.endswith(sub [, start [, end]])
True si la chaîne S se termine par la sous-chaîne sub. start
et end sont des options pour définir le départ et la fin de la
recherche de sub.
Types intégrés spécifiques 41
S.strip([chars])
Supprime les espaces blancs en tête et fin de la chaîne S (ou
les caractères dans chars si le paramètre est passé).
S.lstrip([chars])
Supprime les espaces blancs au début de la chaîne S (ou les
caractères dans chars si le paramètre est passé).
S.rstrip([chars])
Supprime les espaces blancs en fin de la chaîne S (ou les
caractères dans chars si le paramètre est passé).
S.swapcase()
Convertit toutes les majuscules en minuscules et inversement.
S.upper()
Convertit toutes les lettres en majuscules.
S.lower()
Convertit toutes les lettres en minuscules.
S.casefold()
En Python 3.3 et ultérieur, renvoie une version de S exploi-
table pour des comparaisons sans faire de différence entre
minuscules et majuscules ; comparable à S.lower(), mais cer-
tains caractères Unicode sont convertis en minuscules de façon
intelligente (par exemple, ’ß’ est converti en "ss").
S.ljust(width [, fill])
Justifie à gauche la chaîne S d’une largeur de width caractères
et remplit à droite l’espace restant avec des caractères fill
(par défaut, un espace). L’expression et la méthode de mise en
forme de chaînes produisent des effets similaires.
S.rjust(width [, fill])
Justifie à droite la chaîne S d’une largeur de width caractères
et remplit à gauche l’espace restant avec des caractères fill
(par défaut, un espace). L’expression et la méthode de mise en
forme de chaînes produisent des effets similaires.
S.center(width [, fill])
Centre la chaîne S d’une largeur de width caractères et remplit
à gauche et à droite l’espace restant avec des caractères fill
(par défaut, un espace). L’expression et la méthode de mise en
forme de chaînes produisent des effets similaires.
S.zfill(width)
Remplit de zéros à gauche une chaîne S pour produire une
chaîne de largeur width (on peut arriver à ce résultat via la
mise en forme de chaînes).
Types intégrés spécifiques 43
S.translate(table [, deletechars])
Supprime tous les caractères deletechars contenus dans la
chaîne S (s’ils sont présents), puis traduit les caractères en utili-
sant le tableau table, constitué d’une chaîne de 256 caractères
donnant la valeur correspondante de chaque caractère, indicée
selon son numéro ordinal.
S.title()
Renvoie une version de la chaîne au format de titre anglo-
saxon : chaque mot commence par une majuscule et tous les
autres caractères sont en minuscules.
import string
res = string.replace(X, ’span’, ’spam’)
Chaînes Unicode
Tout texte est considéré comme du texte Unicode, même s’il est
encodé avec un caractère par octet (8 bits) selon le schéma ASCII.
Python prend en charge des jeux de caractères et des encodages plus
élaborés grâce à Unicode (notamment des chaînes qui peuvent utiliser
plusieurs octets pour représenter des caractères en mémoire, et des
fichiers texte gérant différents types d’encodages). Cette prise en
charge diffère selon les versions de Python. La version 3.X traite
tout texte comme étant de l’Unicode, et les données binaires sont
représentées séparément, alors que Python 2.X distingue le texte codé
sur 8 bits (et les données) du texte Unicode :
En Python 3.X
Le type normal str et le littéral ’ccc’ représentent tous les
textes, à la fois le texte encodé en 8 bits et le texte Unicode
qui est plus riche. str est une séquence immutable de carac-
tères —des codes (identifiants ordinaux) Unicode décodés en
mémoire.
Le type bytes et le littéral b’ccc’ représentent des valeurs
de données binaires, sous la forme d’octets, notamment des
médias et du texte encodé en Unicode. bytes est une séquence
immutable de petits entiers (un octet formé de 8 bits), qui
prend en charge la majorité des opérations str, et affiche les
contenus, quand cela est possible, sous la forme de caractères
ASCII. Il existe un type supplémentaire : bytearray. C’est
une variante mutable de bytes, comprenant des méthodes
supplémentaires semblables à celles de gestion des listes pour
réaliser des modifications directement.
En 3.X, on notera aussi que les fichiers normaux créés avec
open() impliquent des objets str pour les contenus textuels
et des objets bytes pour les contenus binaires. En mode texte,
les fichiers encodent automatiquement en sortie et décodent
automatiquement en entrée.
À partir de Python 3.3, la forme Unicode littérale u’ccc’
provenant de 2.X est également disponible pour permettre la
compatibilité descendante (elle crée une chaîne str 3.X).
En Python 2.X
Le type normal str et le littéral ’ccc’ représentent les valeurs
du texte en 8 bits et des données binaires. Par ailleurs le type
unicode et le littéral u’ccc’ représentent les codes du texte
Types intégrés spécifiques 45
>>> ’A\xE4B’
’AäB’
>>> ’A\u00E4B’
’AäB’
>>> ’A\U000000E4B’
’AäB’
>>> chr(0xe4)
’ä’
>>> ’A\xE4B’.encode(’latin-1’)
b’A\xe4B’
>>> ’A\xE4B’.encode()
b’A\xc3\xa4B’
>>> ’A\xE4B’.encode(’utf-8’)
b’A\xc3\xa4B’
>>> b’A\xC3\xA4B’.decode(’utf-8’)
’AäB’
46 Chapitre 1. Python précis et concis
>>> S = ’A\xE4B’
>>> open(’uni.txt’, ’w’, encoding=’utf-8’).write(S)
3
>>> open(’uni.txt’, ’rb’).read()
b’A\xc3\xa4B’
>>>
>>> open(’uni.txt’, ’r’, encoding=’utf-8’).read()
’AäB’
>>> B = b’spam’
>>> B
b’spam’
>>> B[0] # Opération de séquence
115
>>> B + b’abc’
b’spamabc’
>>> B.split(b’a’) # Méthodes
Types intégrés spécifiques 47
[b’sp’, b’m’]
>>> list(B) # Séquence d’entiers
[115, 112, 97, 109]
>>> BA = bytearray(b’spam’)
>>> BA
bytearray(b’spam’)
>>> BA[0]
115
>>> BA + b’abc’
bytearray(b’spamabc’)
>>> BA[0] = 116 # Possibilité de modifier
>>> BA.append(115) # Méthodes de liste
>>> BA
bytearray(b’tpams’)
Listes
Les listes sont des séquences mutables (modifiables) de références
d’objets auxquelles on accède à partir de leur offset (position).
Littéraux et création
Les littéraux de listes sont écrits sous la forme de séries de valeurs
séparées par des virgules et encadrées par une paire de crochets. Ils
peuvent être construits de manière dynamique par un certain nombre
d’opérations :
[]
Une liste vide.
[0, 1, 2, 3]
Une liste à quatre éléments dont les indices vont de 0 à 3.
L = [’spam’, [42, 3.1415], 1.23, {}]
Une sous-liste imbriquée : L[1][0] renvoie 42.
L = list(’spam’)
Crée une liste de tous les éléments d’un itérable quelconque
en appelant la fonction constructeur.
Types intégrés spécifiques 49
L = [x ** 2 for x in range(9)]
Crée une liste en rassemblant les résultats d’expressions au
cours de l’itération (compréhension de listes).
Opérations
Les opérations incluent toutes les opérations sur les séquences (voir le
tableau 3, Opérations sur les types séquence (chaînes, listes, tuples, octets,
tableaux d’octets)), toutes les opérations sur les séquences modifiables
(voir le tableau 4, Opérations sur les séquences mutables (listes, tableaux
d’octets)), ainsi que les méthodes suivantes qui sont spécifiques aux
listes, où L désigne un objet liste quelconque :
L.append(X)
Insère un objet unique X à la fin de L, et effectue la modification
de la liste.
L.extend(I)
Insère chaque élément de tout itérable I à la fin de L (comme
avec un +). Cela est identique à L[len(L):] = I. Astuce :
utilisez L[:0] = I pour ajouter tous les éléments au début de I.
L.sort(key=None, reverse=False)
Trie L en ordre croissant par défaut ; si le paramètre key est
présent, il spécifie une fonction à un argument permettant
d’extraire ou de calculer la valeur de comparaison à partir
de chaque élément de la liste. Si le paramètre reverse est
présent et qu’il est égal à true, les éléments de la liste sont triés
comme si chaque comparaison était inversée. Par exemple :
L.sort(key=str.lower, reverse=True). Voir également la
fonction sorted() dans la section Fonctions intégrées.
L.reverse()
Inverse les éléments de L. Voir également la fonction rever-
sed() dans la section Fonctions intégrées.
L.index(X [, i [, j]])
Retourne l’indice de la première occurrence de l’objet X dans
L ; provoque une exception s’il n’est pas trouvé. Il s’agit d’une
méthode de recherche. Si i et éventuellement j sont passés, le
plus petit k est retourné, comme dans l’exemple L[k] == X et
i <= k < j, où j est égal par défaut à len(L).
L.insert(i, X)
Insère un objet X dans L à la position i (comme L[i:i] =
[X], pour i positif ou négatif). Astuce : utilisez L[i:i] = I
50 Chapitre 1. Python précis et concis
Note
En Python 2.X, la syntaxe de la méthode de liste sort est :
L.sort(cmp=None, key=None, reverse=False)
où cmp est une fonction de comparaison à deux arguments, qui
renvoie une valeur inférieure, égale, ou supérieure à zéro pour
indiquer un résultat inférieur, égal, ou supérieur. Cette fonction
de comparaison n’existe plus en 3.X parce qu’elle était le plus
souvent utilisée pour faire correspondre des valeurs de tri et un
ordre de tri inversé (c’est dans ce cas-là que les deux derniers
arguments étaient employés).
>>> res = []
>>> for x in range(3):
52 Chapitre 1. Python précis et concis
Protocole d’itération
Le protocole d’itération définit un ensemble d’objets et de méthodes
utilisés dans tous les contextes d’itérations (notamment les compré-
hensions, les instructions des boucles for, et les fonctions intégrées
comme map() ou filter()) pour parcourir automatiquement les
éléments d’une collection ou les résultats produits à la demande.
L’itération fonctionne de la manière suivante :
• Les contextes d’itérations agissent sur un itérable (un objet
comprenant une méthode __iter__()).
• À son invocation, la méthode __iter__ () de l’itérable ren-
voie un itérateur (un objet avec une méthode __next__ () ; il
s’agit éventuellement du même objet).
• À l’appel de la méthode __next__() de l’itérateur, la méthode
retourne l’élément suivant de l’itération, ou bien provoque une
exception StopIteration pour mettre fin à l’itération.
Expressions générateurs
À partir de Python 2.4, les expressions générateurs produisent des
effets similaires aux compréhensions de listes, sans nécessiter la
génération physique d’une liste contenant tous les résultats. Les
expressions générateurs définissent un ensemble de résultats, mais
ne matérialisent pas la totalité de la liste, afin d’économiser de la
mémoire. À la place, elles créent un objet générateur qui va renvoyer
les éléments un par un, dans des contextes d’itérations, en prenant
automatiquement en charge le protocole d’itération mentionné dans la
section précédente. Par exemple :
ords = (ord(x) for x in aString if x not in skipStr)
for o in ords:
...
Dictionnaires
Littéraux et création
Les littéraux de dictionnaires s’écrivent sous la forme de séries de
paires clé/valeur séparées par des virgules et encadrées par des acco-
lades ; la fonction intégrée dict() prend en charge d’autres modèles
de création, et les compréhensions de dictionnaires emploient l’itéra-
tion en Python 3.X et 2.7. L’assignation de nouvelles clés génère de
nouvelles entrées.
Tout objet immutable peut servir de clé de dictionnaire (par
exemple : une chaîne, un nombre, un tuple), et les instances de classes
peuvent être des clés si elles héritent des méthodes de protocole
de hachage (voir __hash__ dans la section Méthodes de surcharge-
ment d’opérateur). Les clés de tuples prennent en charge les valeurs
composites (par exemple : adict[(M,D,Y)], les parenthèses étant
optionnelles) :
{}
Un dictionnaire vide (pas un ensemble).
{’spam’: 2, ’eggs’: 3}
Un dictionnaire à deux éléments : les clés sont ’spam’ et
’eggs’, les valeurs 2 et 3.
D = {’info’: {42: 1, type(’’): 2}, ’spam’: []}
Dictionnaires imbriqués : D[’info’][42] retourne 1.
D = dict(name=’Bob’, age=45, job=(’mgr’, ’dev’))
Crée un dictionnaire en passant les arguments sous la forme de
mots-clés au constructeur.
D = dict(zip(’abc’, [1, 2, 3]))
Crée un dictionnaire en passant des paires clé/valeur au
constructeur.
D = dict([[’a’, 1], [’b’, 2], [’c’, 3]])
On obtient le même résultat que dans l’exemple précédent :
tout itérable composé d’une clé et d’une valeur est accepté.
D = {c.upper(): ord(c) for c in ’spam’}
Expression de compréhension de dictionnaire (en Python 3.X
et 2.7). Reportez-vous à la section Expressions de compréhensions
de listes pour la syntaxe complète.
Opérations
Les opérations comprennent toutes les opérations de mapping (voir
le tableau 5, Opérations de mapping (dictionnaires)), ainsi que les
Types intégrés spécifiques 57
dict.fromkeys(I [, value])
Crée un nouveau dictionnaire avec des clés provenant de
l’itérable I et des valeurs définies par le paramètre value (la
valeur par défaut est None). Peut être appelé sur une instance
de D ou un type dict.
Tuples
Les tuples sont des séquences immutables (non modifiables) de réfé-
rences d’objets accessibles via leur offset (position).
Littéraux et création
Les littéraux de tuples s’écrivent sous la forme d’une série de valeurs
séparées par des virgules et encadrées par des parenthèses. Les paren-
thèses sont parfois facultatives (par exemple, dans les en-têtes des
boucles for et pour les assignations =) :
()
Un tuple vide.
(0,)
Un tuple à un élément (pas une expression simple).
(0, 1, 2, 3)
Un tuple à quatre éléments.
0, 1, 2, 3
Un autre tuple à quatre éléments (comme dans l’exemple précé-
dent) ; mais invalide quand les virgules et les parenthèses sont
significatives (exemples : argument de fonctions, affichages
2.X).
T = (’spam’, (42, ’eggs’))
Tuples imbriqués : T[1][1] renvoie ’eggs’.
T = tuple(’spam’)
Crée un tuple à partir de tous les éléments d’un itérable, en
appelant la fonction constructeur.
Opérations
Les tuples acceptent toutes les opérations sur les séquences (voir le
tableau 3, Opérations sur les types séquence (chaînes, listes, tuples, octets,
tableaux d’octets)), ainsi que les deux méthodes suivantes, propres aux
tuples, en Python 2.6, 3.0, et les versions ultérieures :
T.index(X [, i [, j]])
Renvoie l’indice de la première occurrence de l’objet X dans le
tuple T ; provoque une exception si aucune occurrence n’est
trouvée. Il s’agit d’une méthode de recherche. Si on passe i et
éventuellement j, la méthode renvoie le plus petit k tel que
60 Chapitre 1. Python précis et concis
Fichiers
fichier ; cette méthode a été retirée de Python 3.X car elle était
redondante.
Ensembles
Les ensembles sont des collections mutables (modifiables) non ordon-
nées d’objets uniques et immutables (non modifiables). Les ensembles
prennent en charge les opérations mathématiques qui leur sont
propres telles que l’union et l’intersection. Ce ne sont pas des
séquences (ils ne sont pas ordonnés), ni des mappings (ils n’associent
pas des valeurs à des clés), mais ils prennent en charge l’itération, et ils
fonctionnent de manière similaire à des dictionnaires qui n’auraient
que des clés.
Littéraux et création
En Python 2.X et 3.X, les ensembles peuvent être créés avec la
fonction intégrée set(), en lui passant un itérable dont les éléments
deviennent membres de l’ensemble ainsi produit. En Python 3.X et
2.7, il est également possible de créer des ensembles via le littéral
{...} et l’expression de compréhensions d’ensembles, bien que set()
soit encore utilisée pour créer un ensemble vide ({} est le dictionnaire
vide), et construire des ensembles à partir d’objets existants.
Les ensembles sont mutables (modifiables), mais les éléments d’un
ensemble doivent être immutables ; la fonction intégrée frozenset()
crée un ensemble immutable qui peut être imbriqué dans un autre
ensemble :
set()
Un ensemble vide ({} est un dictionnaire vide).
S = set(’spam’)
Un ensemble de quatre éléments : valeurs ’s’, ’p’, ’a’, ’m’
(tout itérable est accepté).
S = {’s’, ’p’, ’a’, ’m’}
Un ensemble de quatre éléments, identique à l’exemple précé-
dent (en Python 3.X et 2.7).
S = {ord(c) for c in ’spam’}
Expression de compréhension d’ensemble (en Python 3.X et
2.7) ; pour la syntaxe complète, reportez-vous à la section
Expressions de compréhensions de listes.
66 Chapitre 1. Python précis et concis
S = frozenset(range(5, 5))
Un ensemble figé (immutable) de 10 entiers, de 5 à 4.
Opérations
Ce qui suit détaille les principales opérations sur les ensembles, où S,
S1, et S2 sont des ensembles quelconques. La majorité des opérateurs
d’expressions nécessitent deux ensembles, mais leurs équivalents
employant une méthode acceptent n’importe quel itérable, (que nous
appelons autre dans les exemples de cette section). Cette liste est
représentative mais incomplète. Pour obtenir une liste exhaustive des
expressions et méthodes en rapport avec les ensembles, consultez le
manuel intitulé Python’s Library Reference :
x in S
Appartenance : renvoie True si l’ensemble S contient x.
S1 – S2, S1.difference(autre)
Différence : nouvel ensemble comprenant les éléments de S1
qui ne sont pas dans S2 (ou dans autre).
S1 | S2, S1.union(autre)
Union : nouvel ensemble comprenant les éléments de S1 et de
S2 (ou dans autre) sans doublon.
S1 & S2, S1.intersection(autre)
Intersection : nouvel ensemble comprenant les éléments qui
sont à la fois dans S1 et dans S2 (ou dans autre).
S1 <= S2, S1.issubset(autre)
Sous-ensemble : vérifie que chaque élément appartenant à S1
appartienne aussi à S2 (ou à autre).
S1 >= S2, S1.issuperset(autre)
Sur-ensemble : vérifie que chaque élément appartenant à S2
(ou à autre) appartienne aussi à S1.
S1 < S2, S1 > S2
Véritables sous-ensembles et sur-ensembles : vérifie que S1 et
S2 ne sont pas identiques.
S1 ˆ S2, S1.symmetric_difference(autre)
Différence symétrique : nouvel ensemble comprenant des élé-
ments soit de S1, soit de S2 (soit de autre) mais n’appartenant
pas aux deux ensembles.
S1 |= S2, S1.update(autre)
Mise à jour (ne fonctionne pas avec les ensembles figés) : ajoute
des éléments de S2 (ou provenant de autre) à S1.
Types intégrés spécifiques 67
Booléen
Le type booléen, nommé bool, fournit deux constantes prédéfinies qui
sont ajoutées à la portée intégrée, nommées True et False (disponibles
depuis la version 2.3). Dans la plupart des cas, ces constantes peuvent
être traitées comme si on leur avait respectivement assigné les entiers
1 et 0 (par exemple, True + 3 donne 4). Cependant, le type bool
est une sous-classe du type int, qui est personnalisé pour afficher les
instances différemment (True affiche « True », et non pas « 1 », et
il peut être utilisé comme une mnémonique intégrée dans les tests
logiques).
Conversions de types
Les tableaux 10 et 11 listent les outils pour convertir un type en un
autre type. Tous ces outils créent de nouveaux objets (il ne s’agit pas
de convertisseurs qui modifient les objets). Python 2.X prend aussi en
charge des convertisseurs long(S) vers long et ‘X‘ vers string, qui ont
été supprimés en Python 3.X. Reportez-vous aux sections Nombres
68 Chapitre 1. Python précis et concis
et Mise en forme des chaînes pour certains des outils listés dans ces
tableaux.
Convertisseur Convertit de En
[a] La forme de compréhension de liste peut (éventuellement) être plus lente que
list(), et peut ne pas se révéler optimale dans ce contexte spécifique de conversion. En
Python 2.X seulement, map(None, X) a le même résultat que list(X) dans ce contexte,
bien que cette forme de map() ait été supprimée en Python 3.X.
Convertisseur Convertit de En
repr(X ), Tout objet Python String (repr est d’un usage moins
str(X ) facile que str)
[a] Dans la version 2.2 et ultérieure, les fonctions de conversion (par exemple, int(),
float(), str()) servent aussi de constructeurs de classes et elles peuvent être sous-
classées. En Python 3.X, tous les types sont des classes, et toutes les classes sont des
instances de la classe type.
Instructions et syntaxe 69
INSTRUCTIONS ET SYNTAXE
Cette section décrit les règles de la syntaxe et du nommage des
variables.
Règles syntaxiques
Vous trouverez ci-dessous les règles générales d’écriture des pro-
grammes Python :
Contrôle du flux
Les instructions s’exécutent les unes à la suite des autres, à
moins que des instructions de contrôle ne soient utilisées pour
effectuer un branchement ailleurs dans le code (par exemple,
if, while, for, raise, calls, etc.).
Blocs
Un bloc imbriqué est délimité par l’indentation de toutes ses
instructions qui doivent avoir le même niveau d’indentation
(que l’on utilise des espaces ou des tabulations). Un bloc imbri-
qué peut aussi apparaître sur la même ligne que son en-tête
d’instruction (en suivant le caractère d’en-tête « : »), s’il est
constitué uniquement d’instructions simples non composées.
En règle générale, un bloc donné doit utiliser toutes les tabu-
lations ou tous les espaces pour l’indentation. La combinaison
des deux est analysée selon deux règles formelles : (1) une tabu-
lation compte pour suffisamment d’espaces pour le numéro de
colonne jusqu’au multiple de 8 suivant, et (2) une incohérence
supplémentaire est détectée en comptant chaque tabulation
comme un espace.
En Python 2.X, les combinaisons d’espaces et de tabulations
sont autorisées, si la première règle est satisfaite ; cependant,
le mélange des tabulations et des espaces est déconseillé, car
cela peut provoquer des erreurs et cela nuit à la clarté. De plus,
les options –t ou –tt peuvent être utilisées pour définir des
combinaisons qui ne sont pas conformes à la deuxième règle
(voir la section intitulée Utilisation de la ligne de commande
Python). En Python 3.X, les combinaisons d’espaces et de
tabulations sont toujours autorisées si elles sont valides et
conformes à la fois aux règles 1 et 2, mais elles engendrent
des erreurs dans le cas contraire (même comportement qu’avec
l’option –tt en 2.X).
70 Chapitre 1. Python précis et concis
Règles de nommage
Cette section contient les règles des noms définis par l’utilisateur
(c’est-à-dire les variables) dans les programmes.
as elif if or yield
Note
En Python 2.X, print et exec sont des mots réservés, mais
ils prennent la forme d’instructions, et non pas de fonctions
intégrées. Vous noterez également qu’en Python 2.X, nonlocal,
True et False ne sont pas des mots réservés ; nonlocal n’existe
pas et True et False sont des noms intégrés. with et as sont des
mots réservés à partir de 2.6 et 3.0, mais pas dans les versions
antérieures à 2.X à moins que les gestionnaires de contextes ne
soient explicitement activés. yield est un mot réservé à partir de
la version 2.3 ; dans les versions suivantes, yield n’est plus une
instruction, mais est devenue une expression, tout en restant un
mot réservé.
Conventions de nommage
• Les noms qui commencent et se terminent par deux unders-
cores (par exemple, __init__) ont une signification spéciale
pour l’interpréteur, mais ne sont pas des mots réservés.
• Les noms qui commencent par un underscore (par exemple, _X)
et qui sont assignés au niveau le plus élevé d’un module ne sont
pas copiés par les imports from...* (voir aussi la liste des noms
des modules exportés __all__ dans les sections Instruction from
et Attributs pseudoprivés). Dans les autres contextes, il s’agit
d’une convention informelle pour les noms internes.
Instructions spécifiques 73
INSTRUCTIONS SPÉCIFIQUES
if x < 42:
print(x)
while x: x = x 1
Instructions d’assignation
cible = expression
cible1 = cible2 = expression
cible1, cible2 = expression1, expression2
cible1 += expression
Assignation augmentée
Le tableau 13 liste une série d’instructions supplémentaires d’assi-
gnation. Connue sous le nom d’assignation augmentée, cette forme
implique une expression binaire plus une assignation. Par exemple,
les deux formes suivantes sont pratiquement équivalentes :
X = X + Y
X += Y
X += Y X &= Y X = Y X |= Y
X *= Y X ˆ= Y X /= Y X »= Y
X %= Y X «= Y X **= Y X //= Y
>>> a, b, c, d = [1, 2, 3, 4]
>>> a, d
(1, 4)
>>> a, *b = [1, 2, 3, 4]
>>> a, b
(1, [2, 3, 4])
Note
En Python 3.3 et dans les versions précédentes, les syntaxes
spéciales *X et **X peuvent apparaître dans trois contextes : dans
les instructions d’assignation où *X collecte les éléments sans corres-
pondance dans les assignations de séquences, dans les en-têtes de
fonctions où les deux formes collectent les arguments positionnels
et les arguments nommés sans correspondance, et dans les appels
de fonctions où les deux formes réalisent un unpacking d’itérables
et de dictionnaires dans des éléments individuels (arguments).
En Python 3.4, les développeurs ont envisagé de généraliser
cette syntaxe avec une étoile pour qu’elle soit utilisable dans
des littéraux de structure de données (pour réaliser un unpacking
de collections en éléments individuels, comme dans son premier
usage dans les appels de fonction). En Python 3.5, la syntaxe
d’unpacking avec une étoile a été étendue aux tuples, listes,
ensembles, dictionnaires et compréhensions. Par exemple :
[x, *iter] # unpacking d’éléments : liste
(x, *iter), {x, *iter} # idem pour un tuple, ensemble
{’x’: 1, **dict} # unpacking d’éléments : dictionnaire
[*iter for iter in x] # unpacking d’éléments : compréhension
Ceci est un ajout de la version 3.5 par rapport à la version 3.3 qui
ne prend en compte que les instructions d’assignation, les appels
et les en-têtes de fonctions.
Instruction expression
expression
function([value, name=value, *name, **name...])
object.method([value, name=value, *name, **name...])
Syntaxe d’appel
Dans les appels de fonctions et de méthodes, les arguments sont
séparés par des virgules et correspondent normalement à la position
des arguments des en-têtes def de la fonction. Les appels peuvent
éventuellement lister des noms d’arguments spécifiques dans les fonc-
tions afin de recevoir des valeurs passées en utilisant la syntaxe par
mot-clé nom=valeur. C’est alors le nom de l’argument qui correspond
et non plus sa position.
f(*pargs, **kargs)
Cette syntaxe est conçue pour être symétrique avec la syntaxe des
arguments arbitraires des en-têtes de fonctions comme def f(*pargs,
Instructions spécifiques 79
Instruction print
print([valeur [, valeur]*]
[, sep=str] [, end=str]
[, file=object] [, flush=bool])
Flush
Accepte la valeur true ou false, pour activer ou désactiver le
vidage sur disque du flux de sortie (à partir de Python 3.3; la
valeur par défaut est False).
import sys
sys.stdout.write(str(X) + ’\n’)
Si l’objet fichier est égal à None, alors sys.stdout est utilisé. Cette
syntaxe Python 2.X >> est équivalente à l’argument nommé file=F
en Python 3.X. Il n’y a pas d’équivalent à sep=S en Python 2.X, bien
que les lignes puissent être préformatées et affichées sous la forme
d’un seul élément.
Les parenthèses fonctionnent dans la commande print 2.X, mais
cela crée des tuples pour plusieurs éléments. Pour utiliser la fonction
print Python 3.X en Python 2.X, exécutez le code suivant dans une
session interactive ou bien au sommet d’un script ; cela peut être
utilisé en 2.X (pour une compatibilité ascendante 3.X), et en 3.X
(pour une compatibilité descendante 2.X) :
82 Chapitre 1. Python précis et concis
Instruction if
if test:
suite
[elif test:
suite]*
[else:
suite]
Instruction while
while test:
suite
[else:
suite]
Instruction for
La boucle for est une itération d’une séquence (ou tout autre
itérable) qui assigne les éléments de itérable à cible et exécute
la première suite pour chaque élément. L’instruction for exécute la
suite else optionnelle une fois à la sortie si la boucle se termine
sans exécuter d’instruction break dans la première suite. cible peut
représenter n’importe quel élément susceptible d’apparaître du côté
Instructions spécifiques 83
Instruction pass
pass
Instruction break
break
Instruction continue
continue
Instruction del
del name
del name[i]
del name[i:j:k]
del name.attribute
Instruction def
[decoration]
def nom([arg,... arg=valeur,... *arg, **arg]):
suite
tant que global ou nonlocal en 3.X). Pour des détails sur la notion
de portée, consultez la section Espace de noms et règles de portée.
Les arguments sont passés par assignation ; dans un en-tête def,
ils peuvent être définis dans l’un des quatre formats listés dans
le tableau 14 Format des arguments dans les définitions. Ces formats
d’arguments peuvent aussi être utilisés dans un appel de fonction où
ils sont interprétés selon la forme décrite dans le tableau 15 Format des
arguments dans les appels (voir la section intitulée Instruction expression
pour des détails sur la syntaxe d’appel des fonctions).
Format de
l’argument Interprétation
Expressions lambda
Les fonctions peuvent aussi être créées sous la forme d’une expression
lambda, qui crée un nouvel objet fonction et le retourne pour qu’il
soit appelé ultérieurement, au lieu de l’assigner à un nom :
Comme lambda est une expression, et non pas une instruction, elle
peut être utilisée dans les endroits où une définition est impossible
(par exemple, dans une expression littérale de dictionnaire ou une
liste d’arguments d’un appel de fonction). Comme lambda calcule une
expression unique au lieu d’exécuter des instructions, cela n’est pas
conçu pour des fonctions complexes (dans ce cas, il faut utiliser def).
@décorateur
def F():
...
def F():
...
F = décorateur(F)
class C:
@décorateur
def M(): # Identique à M = décorateur(M)
...
@A
@B
@C
def f(): ...
@spam(1, 2, 3)
def f(): ...
Dans ce cas, spam doit être une fonction qui retourne une fonction,
ce que l’on appelle une fonction factory ; son résultat est utilisé comme
le véritable décorateur, et peut conserver l’état de l’argument si
nécessaire. Les décorateurs doivent apparaître sur la ligne précédant la
définition de la fonction, et non pas sur la même ligne (par exemple,
@A def f(): ... sur une seule ligne est interdit).
Comme ils acceptent et retournent des objets appelables (cal-
lables), certaines fonctions intégrées, notamment property(), static-
method() et classmethod() peuvent être utilisées comme décorateurs
de fonctions (voir la section Fonctions intégrées). La syntaxe des
décorateurs est également prise en charge par les classes en Python
2.6 et 3.0, et ultérieurement dans les versions 2 et 3 (voir la section
Instruction class).
Instruction return
return [expression]
Instruction yield
def generateSquares(N):
for i in range(N):
yield i ** 2
Instruction global
Instruction nonlocal
Instruction import
Imports de packages
S’ils sont utilisés, les noms des préfixes des packages désignent les
noms des répertoires, les chemins de modules comportant des points
reflètent les hiérarchies des répertoires. Un import de la forme import
dir1.dir2.mod charge généralement le fichier du module à partir du
chemin dir1/dir2/mod.py, où dir1 doit se trouver dans un répertoire
listé dans le chemin de recherche des modules (sys.path pour les
imports absolus) et dir2 est situé dans dir1 (et pas dans sys.path).
Dans les packages normaux, chaque répertoire listé dans une
instruction import doit avoir un fichier (éventuellement vide)
__init__.py qui sert d’espace de noms du module au niveau du
répertoire. Ce fichier est exécuté lors du premier import via le
répertoire, et tous les noms assignés dans les fichiers __init__.py
deviennent des attributs de l’objet module du répertoire. Les
packages des répertoires peuvent résoudre les conflits de noms
identiques provoqués par la nature linéaire de PYTHONPATH.
Reportez-vous aussi à la section Syntaxe des imports relatifs des
packages pour de plus amples informations sur les références à l’in-
térieur des packages des instructions from, et à la section Packages
d’espaces de noms Python 3.3 pour un type de package alternatif qui
ne nécessite pas de fichier __init__.py.
Instructions spécifiques 95
Algorithme d’import
Avec l’ajout des packages d’espaces de noms, les imports suivent
les étapes initiales habituelles comme par le passé (par exemple,
vérification des modules déjà importés et des fichiers bytecode), mais
la recherche d’un module est étendue de la manière suivante.
Au cours des imports, Python parcourt chaque répertoire du che-
min de recherche des modules (défini par sys.path pour les composants
les plus à gauche des imports absolus, et par un emplacement de
packages pour les imports relatifs et les composants imbriqués des
chemins de packages. À partir de 3.3, si, par exemple, on recherche un
module importé ou un package nommé spam, pour chaque répertoire
du chemin de recherche des modules, Python teste les critères de
correspondance dans cet ordre :
1. Si répertoire\spam\__init__.py est trouvé, un package nor-
mal est importé et retourné.
2. Si répertoire\spam.{py, pyc, ou toute autre extension
de module} est trouvé, un module simple est importé et
retourné.
3. Si répertoire\spam est trouvé et qu’il s’agit d’un répertoire, il
est enregistré et l’analyse se poursuit avec le répertoire suivant
du chemin de recherche.
4. Si aucun des éléments ci-dessus n’est trouvé, alors l’analyse se
poursuit avec le répertoire suivant du chemin de recherche.
Si l’analyse du chemin de recherche se termine sans retourner
un module ou un package lors des étapes 1 ou 2, et qu’au moins un
96 Chapitre 1. Python précis et concis
Instruction from
En Python 3.X, la forme from ... import * n’est pas valide dans
une fonction ou une classe, car elle empêche de classifier les portées
des noms au moment de la définition. En raison des règles de portée,
la forme * génère aussi des avertissements en 2.X à partir de la version
2.2 si elle apparaît imbriquée dans une fonction ou une classe.
L’instruction from est aussi utilisée pour autoriser de futurs (mais
toujours en discussion) ajouts au langage, avec from __future__
import nom_fonctionnalité. Cette forme ne doit apparaître qu’au
sommet d’un fichier module (précédé uniquement par une chaîne de
documentation ou des commentaires), ou bien n’importe quand au
cours d’une session interactive.
Instruction class
[décoration]
class nom [ ( super [, super]* [, metaclass=M] ) ]:
suite
@decorator
class C:
def meth():
...
class C:
def meth():
...
C = decorator(C)
Métaclasses
Les métaclasses sont des classes qui généralement dérivent de la classe
type afin de personnaliser la création des objets classe eux-mêmes.
Par exemple :
class Meta(type):
def __new__(meta, cname, supers, cdict):
# Ceci et __init__ sont exécutés par l’appel de
type
c = type.__new__(meta, cname, supers, cdict)
return c
class C(object):
__metaclass__ = Meta
...
Instruction try
try:
suite
except [type [as valeur]]: # ou [, valeur] en 2.X
suite
[except [type [as valeur]]:
suite]*
[else:
suite]
[finally:
suite]
Instructions spécifiques 101
try:
suite
finally:
suite
except (type1, type2) as valeur: Intercepte une des exceptions et ses instances
except nom_de_classe, X:
Intercepte une classe d’exception, et assigne X à l’instance
levée (utilisez as après la version 2.5).
except (nom1, nom2, nom2), X:
Intercepte les exceptions, et assigne X aux données supplémen-
taires (utilisez as après la version 2.5).
Instructions spécifiques 103
Instruction raise
En Python 3.X, l’instruction raise prend les formes suivantes :
try:
...
except Exception as E:
raise TypeError(’Bad’) from E
104 Chapitre 1. Python précis et concis
Classes d’exceptions
À partir de Python 3.0 et 2.6, toutes les exceptions sont identifiées par
des classes, qui doivent être dérivées de la classe intégrée Exception
(en 2.X, cette dérivation n’est nécessaire que pour les classes créées
dans le nouveau style). La superclasse Exception fournit des valeurs
par défaut pour l’affichage des chaînes, ainsi que la conservation de
l’argument constructeur de l’attribut args des tuples.
Les classes d’exceptions prennent en charge les catégories d’excep-
tions qui peuvent être facilement étendues. Comme les instructions
try interceptent toutes les sous-classes quand elles désignent une
superclasse, les catégories d’exceptions peuvent être modifiées en
changeant l’ensemble des sous-classes sans interrompre les instruc-
tions try existantes. L’instance levée fournit aussi le stockage des
informations supplémentaires sur l’exception :
class General(Exception):
def __init__(self, x):
self.data = x
try:
raise Specific1(’spam’)
except General as X:
print(X.data) # Affiche ’spam’
Instruction assert
Instruction with
Par exemple, dans le code suivant, les actions de sortie des deux
fichiers sont exécutées automatiquement quand le bloc d’instruction
se termine, quel que soit le résultat de l’exception :
Instructions spécifiques 107
instructions séparées par une ligne) sous la forme d’une chaîne, qui est
compilée puis exécutée dans l’espace de noms contenant l’instruction
exec, ou dans les dictionnaires d’espaces de noms global/local s’ils sont
spécifiés (par défaut, localdict est égal à globaldict). codestring
peut aussi être un code compilé. Consultez aussi les entrées des
fonctions compile(), eval() et de la fonction Python 2.X execfile()
dans la section Fonctions intégrées.
En Python 3.X, cette instruction devient la fonction exec() (voir
la section Fonctions intégrées). La syntaxe assurant la compatibilité
exec(a, b, c) est aussi acceptée en Python 2.X. Conseil : n’utilisez
pas ceci pour évaluer des chaînes de code qui ne sont pas dignes de
confiance car elles s’exécutent sous la forme de lignes de code.
Référence : objet.X
recherche le nom de l’attribut X dans l’objet, puis dans toutes
les classes accessibles au-dessus les instances et les classes. Il
s’agit de la définition de l’héritage ; consultez les Règles d’héritage
formelles pour des informations détaillées.
Les noms qui ne sont pas qualifiés (X, au début d’une expression)
impliquent des règles de portée lexicale. Les assignations lient de tels
noms à une portée locale, à moins qu’ils ne soient déclarés en tant
que global, ou nonlocal en 3.X.
Assignation : X = valeur
rend le nom X local par défaut : crée ou modifie le nom X
dans la portée locale en cours. Si X est déclaré en tant que
global, cela crée ou modifie le nom X dans la portée du
module qui le contient. En Python 3.X seulement, si X est
déclaré en tant que nonlocal, cela modifie le nom X dans la
portée de la fonction qui le contient. Les variables locales sont
normalement stockées dans la pile d’appels pendant le runtime
pour un accès rapide, et ne sont directement visibles que par
le code dans la même portée.
Référence : X
recherche au maximum le nom X dans quatre catégorie de
portées, selon l’ordre suivant :
– La portée locale en cours (la fonction qui contient le nom)
– Les portées locales de toutes les fonctions qui le contiennent
lexicalement (les autres couches de fonctions, de l’intérieur
vers l’extérieur)
– La portée globale en cours (le module qui le contient)
– La portée intégrée (qui correspond au module builtins en
Python 3.X, et au module __builtin__ en Python 2.X)
Les contextes de portée locale et globale sont définis dans
le tableau 17, Portées des noms non qualifiés. Les déclarations
global font commencer la recherche dans la portée globale, et
les déclarations nonlocal en 3.X restreignent la recherche aux
fonctions qui contiennent le nom.
110 Chapitre 1. Python précis et concis
def f1():
x = 42
def f2():
print(x) # Garde x dans la portée de f1
return f2 # Pour être appelé plus tard :
f1()()=>42
def f1():
x = 42
def f2():
def f3():
print(x) # Trouve x dans la portée de f1
f3() # f1() affiche 42
f2()
def f1():
x = 42
def f2(x=x):
print(x) # f1()() affiche 42
return f2
def func(x):
action = (lambda n: x ** n) # Utilisé à partir de
2.2
return action # func(2)(4)=16
def func(x):
action = (lambda n, x=x: x ** n) # Alternative par
défaut
return action # func(2)(4)=16
Bien que ceci soit largement dépassé dans la plupart des cas, les
valeurs par défaut sont encore parfois nécessaires pour faire référence
112 Chapitre 1. Python précis et concis
for I in range(N):
actions.append(lambda I=I: F(I)) # Valeur en cours de
I
Classes et instances
Les objets classes fournissent un comportement par défaut
• L’instruction class crée un objet classe et l’assigne à un nom.
• Les assignations dans les instructions class créent des attributs
de classe, qui héritent du comportement et de l’état de l’objet.
• Les méthodes de classe sont des instructions def imbriquées,
avec des arguments particuliers pour recevoir l’instance du sujet
implicite.
Règles d’héritage
• L’héritage se produit au moment de la qualification des attri-
buts, c’est-à-dire dans objet.attribut, si objet est une classe
ou une instance.
• Les classes héritent des attributs de toutes les classes listées dans
la ligne d’en-tête de l’instruction class (superclasses). Quand
plusieurs classes sont listées, cela signifie qu’il y a un héritage
multiple.
• Les instances héritent des attributs de la classe à partir de
laquelle elles sont générées, plus de tous ceux des superclasses
de cette classe.
• L’héritage recherche dans l’instance, puis dans sa classe, et
ensuite dans toutes les superclasses accessibles, pour utiliser la
première version du nom d’attribut qu’il trouve. Les recherches
dans les superclasses s’effectuent normalement en profondeur,
puis de la gauche vers la droite, mais les nouvelles classes
procèdent selon un modèle de graphe en diamant.
Attributs pseudoprivés
Par défaut, tous les noms des attributs des modules et des classes sont
visibles partout. Des conventions spéciales permettent de masquer
des données limitées, mais elles sont en grande partie conçues pour
empêcher les collisions de noms (voir aussi la section Conventions de
nommage).
Nouvelles classes
En Python 3.X, il y a un modèle de classes unique : toutes les
classes sont considérées comme bénéficiant du nouveau style qu’elles
dérivent ou non de object. En Python 2.X, il y a deux modèles de
classes : le modèle classique (qui est le modèle par défaut dans toutes
les versions 2.X) et le nouveau modèle, qui est une option à partir de
2.2, codé par la dérivation d’un type prédéfini ou d’une classe objet
prédéfinie (par exemple, class A(objet)).
Les nouvelles classes (qui engloblent toutes les classes en Python
3.X) ont les différences suivantes par rapport aux classes ordinaires :
• Les modèles de graphe en diamant d’héritages multiples ont un
ordre de recherche légèrement différent (pour faire simple, la
recherche s’effectue plus en largeur qu’en profondeur grâce
au nouveau style __mro__ ; voir la section Règles d’héritage
formelles).
• Les classes sont désormais des types, et les types sont à présent
des classes : type(I) retourne la classe à partir de laquelle
Programmation orientée objet 115
# DFLR = [X, A, B, D, C, E]
# MRO = [X, A, B, D, C, E, objet]
# Affiche "3" à la fois en 3.X et 2.X (toujours)
retournés par super(), les attributs sont résolus grâce à une analyse
spéciale prenant en compte le contexte d’une partie limitée d’un
MRO d’une classe, en choisissant le premier descripteur ou la valeur
trouvée au cours de la recherche, au lieu d’appliquer un héritage
complet (qui est utilisé sur l’objet super seulement si cette analyse
échoue) ; voir super() dans la section Fonctions intégrées.
Pour assigner un nom d’attribut :
Un sous-ensemble de la procédure de recherche est exécuté pour
l’assignation des attributs :
• Quand elle s’applique à une instance, une telle assignation suit
essentiellement les étapes a à c de la règle 1, en recherchant
dans l’arborescence de l’instance, bien que l’étape b appelle
__set__() au lieu de __get__(), et que l’étape c soit la dernière
étape et stocke dans l’instance au lieu de tenter une récupéra-
tion.
• Quand elle s’applique à une class, une telle assignation exécute
la même procédure sur l’arborescence de la métaclasse de la
classe : il s’agit approximativement de la règle 2, mais l’étape c
est la dernière étape et stocke dans la classe.
__init__(self [, arg]*)
Invoquée lors de la création de la classe class(args...). Il
s’agit de la méthode du constructeur qui initialise la nouvelle
instance, self. Quand elle est exécutée pour les appels avec
un nom de classe, self est fournie automatiquement ; arg
represéente les arguments passés au nom de la classe, et il peut
s’agir de n’importe quelle forme d’argument de définition de
fonction (voir les sections Instruction expression et Instruction
def, y compris le tableau 14, Format des arguments dans les
définitions).
Bien qu’elle soit techniquement appelée après __new__,
__init__ est le moyen préféré pour configurer les nouveaux
objets dans toutes les classes au niveau de l’application. Elle
ne doit pas retourner de valeur, et si nécessaire, elle doit
appeler manuellement la méthode __init__ des superclasses
en passant en même temps l’instance à self, via un nom de
superclasse explicite ou super() (voir la section Fonctions
intégrées). Python appelle une seule méthode __init__
automatiquement.
__del__(self)
Invoquée lors du traitement de l’instance par le garbage collec-
tor. Il s’agit de la méthode du destructeur qui fait le ménage
quand une instance self est libérée (recyclée). Les objets
imbriqués sont automatiquement libérés quand leur conteneur
est supprimé (à moins qu’ils ne soient référencés ailleurs).
Pendant l’exécution de cette méthode, les exceptions sont
ignorées et seuls des messages sont envoyés à sys.stderr.
Conseil : l’instuction try/finally permet de programmer plus
finement les actions de sortie d’un bloc de code ; l’instruction
with offre des possibilités similaires pour les types d’objets qui
sont pris en charge.
__repr__(self)
Invoquée par repr(self), elle permet un affichage interactif
et imbriqué (comme ‘self‘ en Python 2.X). Elle est aussi
invoquée par str(self) et print(self) s’il n’y a pas de
méthode __str__. Cette méthode retourne généralement une
représentation de self de bas niveau sous la forme d’une
chaîne de caractères.
Méthodes de surchargement d’opérateur 123
__str__(self)
Invoquée par str(self) et print(self) (ou utilise __repr__
comme solution de repli si elle est définie). Cette méthode
retourne en général une présentation de haut niveau sous forme
de chaîne de caractères de self.
__format__(self, formatspec)
Appelée par la fonction intégrée format() (et par extension,
par la méthode str.format() de str) pour produire une repré-
sentation de chaîne mise en forme de l’objet self, grâce à la
chaîne formatspec dont la syntaxe pour les types intégrés est
fournie par le composant du même nom dans str.format().
Voir les sections Syntaxe de la méthode de mise en forme, Méthode
de mise en forme de chaînes et Fonctions intégrées. Cette méthode
est nouvelle à partir de Python 2.6 et 3.0.
__bytes__(self)
Appelée par bytes() pour retourner une représentation chaîne
d’un type bytes de self, uniquement en Python 3.X.
__hash__(self)
Invoquée par dictionary[self] et hash(self), et les autres
opérations de collection hachées, notamment celles du type
set. Cette méthode retourne une clé de hachage sous la forme
d’un entier unique et non modifiable, et interagit discrète-
menta avec __eq__, ces deux méthodes ayant des valeurs par
défaut qui garantissent que tous les objets ne se considèrent
égaux qu’avec eux-mêmes ; consultez la documentation de
Python pour des informations détaillées.
__bool__(self)
Appelée pour les tests de valeur vraie et la fonction intégrée
bool() ; retourne False ou True. Quand __bool__ n’est pas
définie, __len__() est appelée si elle est définie et désigne une
valeur vraie avec valeur différente de zéro. Si une classe ne
définit ni __len__ ni __bool__, toutes ses instances sont consi-
dérées comme vraies. Cette méthode est nouvelle en Python
3.X ; en Python 2.X, cette méthode s’appelle __nonzero__ au
lieu de __bool__, mais elle fonctionne de manière identique.
__call__(self [, arg]*)
Invoquée par self(args...), quand une instance est appelée
comme un fonction. arg peut prendre n’importe quelle forme
d’argument de définition de fonction. Par exemple, les deux
définitions suivantes :
124 Chapitre 1. Python précis et concis
self(1, 2, 3, 4)
self(1, *(2,), c=3, **dict(d=4))
__iter__(self)
Invoquée par iter(self). Ajoutée à la version 2.2, cette
méthode fait partie du protocole d’itération. Elle retourne un
objet avec une méthode __next__ (éventuellement self ).
Le résultat de la méthode __next__() de l’objet est ensuite
appelé de manière répétée dans tous les contextes d’itération
(par exemple, les boucles for), et doit retourner le résultat
siuvant ou lever une exception StopIteration pour terminer
la progression des résultats.
S’il n’y a pas de méthode __iter__ définie, l’itération a recours
à __getitem__. La méthode __iter__ d’une classe peut aussi
être codée avec un yield imbriqué pour retourner un généra-
teur avec une méthode __next__ créée automatiquement. En
Python 2.X, __next__ se nomme simplement next. Voir aussi
les sections Instruction for et Protocole d’itération.
__next__(self)
Invoquée par la fonction intégrée next(self), et par tous les
contextes d’itération pour avancer dans les résultats. Cette
méthode fait partie du protocole d’itération ; voir la méthode
__iter__ dans cette liste pour les détails de son utilisation. Elle
est nouvelle en Python 3.X ; en Python 2.X, elle s’appelle next,
mais fonctionne de la même manière.
__getitem__(self, clé)
Invoquée par self[clé], self[i:j:k], x in self, et éven-
tuellement dans tous les contextes d’itération. Cette méthode
implémente toutes les opérations relatives à l’indiçage, notam-
ment celles pour les séquences et les mappings. Les contextes
d’itération (par exemple, in et for) indicent de manière répé-
tée à partir de 0 jusqu’à IndexError, à moins que la méthode
préférable __iter__ ne soit définie. __getitem__ et __len__
constituent le protocole de séquence.
En Python 3.X, cette méthode et les deux suivantes sont
également appelées pour les opérations d’extraction (slicing),
et dans ce cas, clé est un objet slice. Les objets slice, qui
peuvent être propagés par une autre expression slice, ont les
attributs start, stop, et step, qui peuvent tous prendre la
valeur None (pour signaler l’absence). Consultez aussi slice()
dans la section Fonctions intégrées.
Méthodes de surchargement d’opérateur 129
Note
Les « descripteurs » de classes ne doivent pas être confondus avec
les « descripteurs de fichiers » (voir les sections Fichiers et Outils
de descripteurs de fichiers pour des informations sur les descripteurs
de fichiers).
__metaclass__
Attribut de classe assigné à la métaclasse de la classe. En
Python 3.X, utilisez à la place la syntaxe de l’argument nommé
metaclasse=M dans la ligne d’en-tête de la classe (voir la section
Métaclasses).
FONCTIONS INTÉGRÉES
bin(N)
Convertit un entier en une chaîne de chiffres binaires (base
2). Le résultat est une expression Python valide. Si l’argu-
ment N n’est pas un objet Python int, il doit définir une
méthode __index__() qui retourne un entier. Conseil : pensez
aussi à int(string, 2) pour convertir des nombres binaires,
des littéraux binaires 0bNNN dans du code, et le type b dans
str.format().
bool([X])
Retourne la valeur booléenne d’un objet X, en utilisant la
procédure standard de test de vérité. Si X est faux ou omis,
False est retourné ; dans le cas contraire, True est retourné.
bool est aussi une classe, qui est une sous-classe de int. La
classe bool ne peut pas être sous-classée davantage. Ses seules
instances sont False et True.
bytearray([arg [, encodage [, erreurs]]])
Retourne un nouveau tableau d’octets. Le type bytearray est
une séquence de mutables qui sont des nombres entiers compris
dans la plage 0...255, s’affichant sous la forme de texte ASCII
quand cela est possible. Il s’agit essentiellement d’une variante
mutable de bytes, qui prend en charge la plupart des opérations
sur les séquences de mutables, ainsi que la plupart des méthodes
du type chaîne str. arg peut être une chaîne str avec un nom
d’encodage (et éventuellement des erreurs) comme avec str()
(décrite plus loin dans cette liste), un entier pour intialiser un
tableau de valeurs NULL (valeur zéro), un itérable de petits
entiers utilisés pour initialiser le tableau (chaîne de bytes
ou un autre bytearray), un objet se conformant à l’interface
de visualisation de la mémoire (appelée auparavant buffer)
utilisé pour intialiser le tableau, voire être absent, pour créer
un tableau vide. Voir également la section Chaînes byte et
bytearray.
bytes([arg [, encodage [, erreurs]]])
Retourne un nouvel objet bytes, qui est une séquence immu-
table d’entiers dans la plage 0...255. bytes est une version
immutable de bytearray. La fonction a les mêmes méthodes
de chaînes non mutables et les mêmes opérations de séquences.
Elle est généralement utilisée pour représenter une chaîne
d’octets sur 8 bits de données binaires (par exemple, des médias,
du texte encodé en Unicode). Les arguments du constructeur
Fonctions intégrées 139
complex([réel [, imag]])
Crée un objet nombre complexe (cela peut aussi être codé en
utilisant le suffixe J ou j : réel+imagJ). imag vaut 0 par défaut.
Si les deux arguments sont omis, la fonction retourne 0j.
delattr(objet, nom)
Supprime l’attribut nommé nom (une chaîne) de l’objet. Simi-
laire à del objet.nom, mais nom est une chaîne, et non pas une
variable prise littéralement (par exemple, delattr(a, ’b’) est
équivalent à del a.b).
dict([mapping | itérable | arguments nommés])
Retourne un nouveau dictionnaire intialisé à partir d’un map-
ping, d’une séquence ou tout autre itérable de paires clé/valeur,
ou bien d’un ensemble d’arguments nommés. Si aucun argu-
ment n’est fourni, la fonction retourne un dictionnaire vide. Il
s’agit d’un nom de classe d’un type qui peut être sous-classé.
dir([objet])
Si aucun argument n’est passé, la fonction retourne la liste des
noms de la portée locale en cours (espace de noms). Quand
un objet avec des attributs est passé comme argument, elle
retourne la liste des noms d’attributs associés à cet objet.
Elle fonctionne sur les modules, les classes, et les instances
de classes, ainsi que sur les objets intégrés avec des attributs
(listes, dictionnaires, etc.). Le résultat, qui inclut les attributs
hérités, est trié ; utilisez les attributs de __dict__ pour les listes
d’attributs d’un seul objet. Cet appel exécute objet.__dir__()
si elle existe, ce qui peut fournir les noms des attributs calculés
dans les classes proxys ou dynamiques.
divmod(X, Y)
Retourne un tuple de (X / Y, X % Y).
enumerate(itérable, début=0)
Retourne un objet enumerate itérable. itérable doit être
une séquence ou un autre objet itérable qui prend en charge
le protocole d’itération. La méthode __next__() de l’itéra-
teur retourné par enumerate() retourne un tuple contenant
un compteur (démarrant à début, ou zéro par défaut) et la
valeur correspondante obtenue du parcour de l’itérable. Cela
est utile pour obtenir une série indicée des positions et des
éléments, dans des itérations comme des boucles for (par
exemple, (0, x[0]), (1, x[1]), (2, x[2]), ...). La fonction
est disponible dans la version 2.3 et les suivantes. Voir aussi
Fonctions intégrées 141
float([X])
Convertit un nombre ou une chaîne X en un nombre à virgule
flottante (ou 0.0 si aucun argument n’est passé). Voir aussi la
section Nombres pour des exemples d’utilisation. Il s’agit d’un
nom de classe d’un type qui peut être sous-classé.
format(valeur [, formatspec])
Convertit une valeur d’objet en une représentation mise
en forme, selon un format contrôlé par la chaîne formats-
pec. L’interprétation de formatspec dépend du type de l’ar-
gument valeur ; la plupart des types intégrés utilisent une
syntaxe standard de mise en forme qui a été décrite plus
haut (voir formatspec dans la section Syntaxe de la méthode
de mise en forme). format(valeur, formatspec), qui appelle
valeur.__format__(formatspec), est une opération de base
de la méthode str.format() (par exemple, format(1.3333,
’.2f’) est équivalent à ’{0:.2f}’.format(1.3333)).
frozenset([itérable])
Retourne un objet d’ensemble figé dont les éléments sont
extraits d’un itérable. Les ensembles figés sont des ensembles
d’immutables qui n’ont pas de méthodes de mise à jour et qui
peuvent être imbriqués dans d’autres ensembles.
getattr(objet, nom [, valeur_par_défaut])
Retourne la valeur d’un nom d’attribut (une chaîne) à partir
d’un objet. Similaire à objet.nom, mais le nom est évalué sous
la forme d’une chaîne, et ce n’est pas un nom de variable pris
littéralement (par exemple, getattr(a, ’b’) est équivalent à
a.b). Si l’attribut nommé n’existe pas, la valeur_par_défaut
est retounée si elle est fournie, sinon une exception Attribu-
teError est levée.
globals()
Retourne un dictionnaire contenant les variables globales
de l’appelant (par exemple, les noms du module qui les
contiennent).
hasattr(objet, nom)
Retourne True si l’objet a un attribut appelé nom (une chaîne),
et False dans le cas contraire.
hash(objet)
Retourne la valeur de hachage de l’objet (s’il en a une). Les
valeurs de hachage sont des entiers utilisés pour comparer
Fonctions intégrées 143
Note
Comme le mode de fichier implique à la fois des options de
configuration et des types de données string en 3.X, il est utile
de se représenter la fonction open() comme ayant deux modes
bien distincts : le mode texte et le mode binaire.Les développeurs
Python choisissent de surcharger une seule fonction pour prendre
en charge les deux types de fichiers, avec des arguments spécifiant
le mode et des types de contenu différents, au lieu de fournir deux
fonctions open() séparées. La librairie de la classe io (dont open()
est le frontend en 3.X) gère des types de fichiers spécialisés pour
les modes. Consultez la documentation Python pour les détails
concernant le module io. io est aussi disponible en 2.X à partir
de 2.6 comme une alternative au type intégré file, mais il s’agit
de l’interface normale de fichier pour la fonction open() en 3.X.
Fonctions intégrées 151
ord(C)
Retourne un entier correspondant à la valeur du code de la
chaîne C composée d’un caractère. Pour les caractères ASCII,
il s’agit du code ASCII sur 7 bits ; en général, c’est le code
Unicode de la chaîne Unicode C. Consultez également dans
cette liste la fonction inverse chr().
pow(X, Y [, Z])
Retourne X à la puissance Y [modulo Z]. Similaire à l’opérateur
d’expression **.
print(...)
print([objet [, objet]*]
[, sep=’ ’] [, end=’\n’]
[, file=sys.stdout] [, flush=False])
J’ai présenté cette fonction comme open() car elle a à présent
trop de paramètres pour tenir sur une seule ligne.
Imprime des objet(s) optionnels sur le flux file, séparés
par des sep, suivis par des end, avec un paramètre optionnel
de traitement de post-impression flush. Les quatre derniers
arguments, s’ils sont présents, doivent être fournis sous la forme
d’arguments nommés, et ont des valeurs par défaut indiquées
dans la syntaxe ; flush est disponible à partir de Python 3.3.
Tous les arguments qui ne sont pas des arguments nommés sont
convertis en chaînes en utilisant l’équivalent de str(), et écrits
sur le flux. sep et end doivent être des chaînes ou être égaux à
None (ce qui signifie qu’ils utilisent leur valeur par défaut). Si
aucun objet n’est fourni, end est écrit. file doit être un objet
avec une méthode write(string), mais n’a pas besoin d’être
un véritable fichier ; s’il n’est pas passé ou bien est égal à None,
sys.stdout sera utilisé.
La fonctionnalité de print est disponible sous la forme d’une
instruction en Python 2.X. Voir aussi la section Instruction
print.
property([fget[, fset[, fdel[, doc]]]])
Retourne un attribut propriété pour les nouvelles classes
(classes qui dérivent de object, notamment toutes les classes
en 3.X). fget est un fonction pour récupérer la valeur d’un
attribut, fset est une fonction pour la définir, et fdel une
fonction pour la supprimer. Cette fonction peut être utilisée
comme décorateur de fonction (@property), et retourne un
objet avec les méthodes getter, setter, et deleter, qui
152 Chapitre 1. Python précis et concis
vars([objet])
Sans arguments, la fonction retourne un dictionnaire conte-
nant les noms de la portée locale en cours. Avec pour argument
un objet module, classe, ou instance de classe, elle retourne un
dictionnaire correspondant à l’espace de noms des attributs de
l’objet (c’est-à-dire sa méthode __dict__). Le résultat ne doit
pas être modifié. Conseil : cette fonction est utile pour faire
référence à des variables dans la mise en forme de chaînes.
zip([itérable [, itérable]*])
Retourne une série de tuples, où chaque énième tuple contient
le énième élément de chacun des itérables de l’argument. Par
exemple, zip(’ab’, ’cd’) retourne (’a’, ’c’) et (’b’, ’d’).
Au moins un itérable est nécessaire, sinon le résultat est vide.
La série qui en résulte est tronquée à la longueur du plus
petit itérable de l’argument. Avec un argument ne comportant
qu’un seul itérable, la fonction retourne une série de tuples ne
contenant qu’un seul élément. Elle peut aussi être utilisée pour
dézipper des tuples zippés : X, Y = zip(*zip(T1, T2)).
En Python 2.X, la fonction retourne une liste. En Python
3.X, elle retourne un objet itérable qui génère des valeurs à la
demande et qui ne peut être parcouru qu’une seule fois (appelez
list() pour forcer la génération des résultats si nécessaire). En
Python 2.X (mais pas en Python 3.X), quand il y a plusieurs
itérables de la même longueur comme arguments, zip() est
similaire à map() avec un premier argument égal à None.
exec()
Elle est présente en Python 2.X avec une sémantique similaire
sous la forme d’une instruction.
memoryview()
La fonction est disponible en Python 2.7 par souci de compati-
bilité avec 3.X.
print()
Présente dans le module Python 2.X __builtin__, mais la
fonction n’est pas utilisable directement avec la même syntaxe
sans import __future__, car elle est disponible sous la forme
d’une instruction et il s’agit d’un mot réservé en Python 2.X
(voir la section Instruction print).
cmp(X, Y)
Retourne un entier négatif, zéro ou un entier positif pour
désigner X < Y, X == Y, ou X > Y, respectivement.
En Python 3.X, la fonction a été supprimée, mais elle peut
être émulée sous la forme : (X > Y) - (X < Y). Cependant, la
plupart des cas courants d’utilisation de cmp() (fonction de
comparaison dans les tris, et la méthode __cmp__() des classes)
ont aussi été supprimés en Python 3.X.
coerce(X, Y)
Retourne un tuple contenant les deux arguments numériques
X et Y convertis en un type commun.
Cette fonction a été supprimée en Python 3.X (elle était
principalement utilisée pour les classes classiques en Python
2.X).
execfile(nom_de_fichier [, global [, local]])
Similaire à eval(), mais exécute tout le code d’un fichier
dont le nom est passé dans le paramètre nom_de_fichier
(au lieu d’une expression). À la différence des imports, cette
fonction ne crée pas un nouvel objet module pour le fichier.
Elle retourne None. Les espaces de noms pour le code dans
nom_de_fichier sont équivalents à ceux de eval().
En Python 3.X, cette fonction peut être émulée par
exec(open(nom_de_fichier).read()).
file(nom_de_fichier [, mode[, taille_buffer]])
Alias de la fonction intégrée open(), et nom de classe du type
intégré de fichier pouvant être sous-classé.
En Python 3.X, le paramètre nom_de_fichier a été supprimé :
utilisez open() pour accéder aux fichiers, et le module de
librairie standard io pour les personnaliser (io qui est utilisé
par open() en 3.X est une option en 2.X à partir de 2.6).
input([prompt]) (forme originale 2.X)
Affiche prompt, s’il est fourni, puis lit la ligne d’entrée à partir
du flux stdin (sys.stdin), et l’évalue en tant que code Python
pour retourner le résultat. En 2.X, la fonction est équivalente
à eval(raw_input(prompt)). Conseil : n’utilisez pas ceci pour
évaluer des chaînes de code qui ne sont pas dignes de confiance
car le code est exécuté.
En Python 3.X, comme raw_input() a été renommé input(),
la fonction originale Python 2.X input() n’est plus disponible,
mais elle peut être émulée par eval(input(prompt)).
Fonctions intégrées 161
intern(string)
Insère string dans la table des « chaînes internées »
et retourne cette chaîne. Les chaînes internées sont
« immortelles » et servent à optimiser les performances (elles
peuvent comparées plus rapidement avec l’identité is plutôt
que par l’égalité ==)
En Python 3.X, cette fonction a été déplacée dans
sys.intern(). Importez le module sys pour l’utiliser et
consultez la section Module sys pour des informations
détaillées.
long(X [, base])
Convertit un nombre ou une chaîne X en un entier long. Le
paramètre base ne peut être passé que si X est une chaîne. S’il
est égal à 0, la base est déterminée par le contenu de la chaîne ;
dans le cas contraire, le paramètre est utilisé comme base de la
conversion. Il s’agit d’un nom de classe d’un type qui peut être
sous-classé.
En Python 3.X, le type entier int prend en charge de manière
arbitraire la précision longue et incorpore par conséquent le
type Python 2.X long. Utilisez int() en Python 3.X.
raw_input([prompt])
Il s’agit du nom Python 2.X de la fonction Python 3.X input()
décrite dans la section précédente : affiche prompt, et lit et
retourne, mais n’évalue pas la ligne d’entrée.
En Python 3.X, utilisez la fonction intégrée input().
reduce(fonction, itérable [, init])
Applique la fonction à deux arguments aux éléments successifs
d’un itérable, de manière à résuidre la collection à une valeur
unique. Si init est fourni, il est ajouté à l’itérable.
En Python 3.X, cette fonction est toujours disponible sous
la forme functools.reduce(). Importez le module functools
pour l’utiliser.
reload(module)
Recharge, analyse à nouveau puis réexécute un module déjà
importé dans l’espace de noms en cours du module. La réexécu-
tion remplace les premières valeurs des attributs du module.
Le module doit référencer un objet module existant ; il ne
s’agit pas d’un nouveau nom ou d’une chaîne. Ceci est utile
en mode interactif si vous voulez recharger un module après
l’avoir réparé, sans redémarrer Python. La fonction retourne
162 Chapitre 1. Python précis et concis
EXCEPTIONS INTÉGRÉES
Cette section décrit les exceptions prédéfinies par Python qui peuvent
être levées par Python ou par du code écrit par un développeur au
cours de l’exécution d’un programme. Elle présente principalement
l’état des exceptions intégrées en Python 3.3 (qui a introduit de
nouvelles classes pour les erreurs liées au système qui incorporent les
anciennes classes génériques procurant des informations sur l’état),
mais fournit des détails communs à la plupart des versions de Python.
Reportez-vous aux sous-sections sur Python 3.2 et 2.X à la fin de cette
section pour les différences spécifiques à ces versions.
Depuis Python 1.5, toutes les exceptions intégrées sont des objets
classe (avant la version 1.5, il s’agissait de chaînes). Les exceptions
intégrées sont disponibles dans l’espace de noms de la portée intégrée
(voir la section Espace de noms et règles de portée), et de nombreuses
exceptions intégrées ont des informations d’état associées qui four-
nissent des détails sur les exceptions. Les exceptions définies par
l’utilisateur sont en général dérivées de cet ensemble intégré (voir la
section Instruction raise).
Superclasses : catégories
Les exceptions suivantes ne sont utilisées qu’en tant que superclasses
pour les autres exceptions :
BaseException
Il s’agit de la superclasse racine pour toutes les exceptions
intégrées. Elle n’est pas censée offrir un héritage direct aux
classes définies par l’utilisateur ; utilisez plutôt Exception pour
cela. Si str() est appelée sur une instance de cette classe, la
Exceptions intégrées 165
Exceptions spécifiques
Les classes suivantes sont des exceptions plus spécifiques qui sont
quand même parfois levées. En outre, NameError, RuntimeError,
SyntaxError, ValueError et Warning sont à la fois des exceptions
spécifiques et des superclasses d’autres exceptions intégrées :
AssertionError
Levée quand le test d’une instruction assert est faux.
AttributeError
Levée quand une référence d’attribut ou une assignation
échoue.
EOFError
Levée quand la fin d’un fichier est atteinte par input() (ou
raw_input() en Python 2.X). Les méthodes de lecture des
objets file retournent un objet vide quand la fin du fichier est
atteinte au lieu de lever cette exception.
FloatingPointError
Levée quand une opération en virgule flottante échoue.
Exceptions intégrées 167
GeneratorExit
Levée quand la méthode close() d’un générateur est appelée.
Cette exception est héritée directement de BaseException et
non pas de Exception puisqu’il ne s’agit pas d’une erreur.
ImportError
Levée quand une instruction import ou from n’arrive pas à
trouver un module ou un attribut. À partir de Python 3.3, les
instances, en identifiant le module qui a déclenché l’erreur,
incluent les attributs name et path, qui sont passés en tant
qu’arguments nommés au constructeur.
IndentationError
Levée quand une mauvaise indentation est détectée dans le
code source. Dérivée de SyntaxError.
IndexError
Levée quand des offsets de séquences sont en dehors des limites
(pour une recherche ou une assignation). Les indices des
objets slice sont ajustés automatiquement pour ne pas être en
dehors des limites autorisées ; si un indice n’est pas un entier,
l’exception TypeError est levée.
KeyError
Levée quand des références pointent sur des clés de mappings
qui n’existent pas (lors d’une recherche). L’assignation à une
clé qui n’existe pas crée cette clé.
KeyboardInterrupt
Levée quand l’utilisateur saisit une touche d’interruption (nor-
malement Ctrl+C ou Suppr). Pendant l’exécution, un contrôle
des interruptions est réalisé régulièrement. Cette exception
hérite directement de BaseException pour l’empêcher d’être
accidentellement interceptée par du code qui intercepte Excep-
tion, ce qui évite de quitter l’interpréteur.
MemoryError
Levée quand se produit un épuisement de la mémoire. Cela
provoque l’affichage d’une trace de la pile si un programme
gros consommateur de mémoire en est la cause.
NameError
Levée quand un nom local ou global non qualifié n’est pas
trouvé.
NotImplementedError
Levée quand il est impossible de définir les protocoles atten-
dus. Les méthodes de classes abstraites peuvent lever cette
168 Chapitre 1. Python précis et concis
UnicodeError
Levée en cas d’encodage lié à Unicode ou d’erreurs de déco-
dage ; il s’agit d’une catégorie de superclasse et d’une sous-classe
de ValueError. Conseil : certains outils Unicode peuvent aussi
lever une exception LookupError.
UnicodeEncodeError, UnicodeDecodeError,
UnicodeTranslateError
Levée en cas d’erreurs de traitement lié à Unicode ; il s’agit de
sous-classes de UnicodeError.
ValueError
Levée quand une opération intégrée ou une fonction reçoit un
argument qui a un type correct, mais une valeur inappropriée,
et que le problème n’est pas décrit par une exception plus
spécifique, comme IndexError.
ZeroDivisionError
Levée lors d’opérations de division ou de modulo avec la valeur
0 du côté droit de l’opérande.
BrokenPipeError
Levée quand on tente d’écrire sur un pipe alors que l’autre
extrémité a été fermée, ou que l’on tente d’écrire sur un socket
qui a été fermé pendant une écriture.
ConnectionAbortedError
Levée quand une tentative de connexion est annulée par le
pair.
ConnectionRefusedError
Levée quand une tentative de connexion est refusée par le pair.
ConnectionResetError
Levée quand une connexion est réinitialisée par le pair.
FileExistsError
Levée quand on tente de créer un fichier ou un répertoire qui
existe déjà.
FileNotFoundError
Levée quand un fichier ou un répertoire qui n’existe pas est
demandé.
InterruptedError
Levée quand un appel système est interrompu par un signal
entrant.
IsADirectoryError
Levée quand une opération de fichier, comme os.remove(), est
demandée sur un répertoire.
NotADirectoryError
Levée quand une opération de répertoire, comme
os.listdir(), est demandée sur un objet qui n’est pas un
répertoire.
PermissionError
Levée quand des opérations sont exécutées sans que l’on ait les
droits d’accès (par exemple, des permissions sur le système de
fichiers).
ProcessLookupError
Levée quand un processus n’existe pas.
TimeoutError
Levée quand une fonction système s’arrête au niveau du sys-
tème.
172 Chapitre 1. Python précis et concis
Avertissements
import warnings
warnings.filterwarnings(action = ’ignore’,
message=’.*regex module*’,
category=DeprecationWarning,
module = ’__main__’)
ATTRIBUTS INTÉGRÉS
Certains objets exportent des attributs spéciaux qui sont prédéfinis par
Python. Vous trouverez ci-dessous une liste partielle car de nombreux
Modules de la librairie standard 175
types ont des attributs uniques bien à eux ; consultez les entrées de
ces types spécifiques dans la documentation de la librairie Python :1
X.__dict__
Dictionnaire utilisé pour stocker les attributs modifiables de
l’objet X.
I.__class__
Objet classe à partir de laquelle l’instance I a été générée. En
version 2.2 et dans les versions suivantes, cela s’applique aussi
aux types, et la plupart des objets ont un attribut __class__
(par exemple, [].__class__ == list == type([])).
C.__bases__
Tuple des classes de base de la classe C, qui sont listées dans
l’en-tête de l’instruction class de C.
C.__mro__
Chemin MRO calculé dans l’arborescence de la nouvelle classe
C (voir la section Nouvelles classes : MRO).
X.__name__
Chaîne de caractères du nom de l’objet X ; pour les classes,
c’est le nom dans l’en-tête de l’instruction ; pour les modules,
il s’agit du nom utilisé dans les imports, ou de "__main__" pour
le module au plus haut niveau d’un programme (par exemple,
fichier principal exécuté pour lancer un programme).
1. À partir de Python 2.1, vous pouvez aussi lier arbitrairement des attributs
définis par l’utilisateur à des objets function, en leur assignant simplement des
valeurs ; voir la section Valeurs par défaut et attributs de fonctions. Python
2.X prend également en charge les attributs spéciaux I.__methods__ et
I.__members__ qui listent les méthodes et les noms des membres des
instances de certains types intégrés. Ils ont été supprimés en Python 3.X
et vous devez utiliser à la place la fonction dir().
176 Chapitre 1. Python précis et concis
• from module import nom, et utilisez les noms des module qui ne
sont pas qualifiés (nom)
• from module import *, et utilisez les noms des module qui ne
sont pas qualifiés (nom)
MODULE SYS
sys.argv
Liste des chaînes des arguments de la ligne de commande :
[nom_de_script, arguments...]. Similaire au tableau argv
en langage C. argv[0] peut représenter l’une des valeurs
suivantes : le nom du fichier de script (avec éventuellement
son chemin complet), la chaîne ’-c’ de l’option de la ligne
de commande -c, un nom de chemin de module de l’option
-m, un caractère ’-’ de l’option – ou une chaîne vide si aucun
nom de script ou d’option de commande n’a été passé. Voir
aussi la section Spécifications du programme à exécuter en ligne de
commande.
sys.byteorder
Indique l’ordre natif des octets (par exemple, ’big’ pour big-
endian, ’little’ pour little-endian).
sys.builtin_noms_modules
Tuple des noms des chaînes des modules C compilés dans
l’interpréteur Python.
sys.copyright
Chaîne contenant le copyright de l’interpréteur Python.
sys.displayhook(valeur)
Appelée par Python pour afficher les valeurs du résultat dans les
sessions interactives ; assigne sys.displayhook à une fonction
à seule argument pour personnaliser la sortie.
sys.dont_write_bytecode
Quand cela est vrai, Python ne va pas tenter d’écrire des
fichiers .pyc ou .pyo sur l’import des modules source (voir aussi
l’option -B de la ligne de commande dans la section Utilisation
de la ligne de commande Python pour les sélections au lancement
du programme).
sys.excepthook(type, valeur, traceback)
Appelée par Python pour afficher sur stderr les détails
des exceptions qui ne sont pas interceptées ; assigne
sys.excepthook à une fonction à trois arguments pour
personnabliser l’affichage des exceptions.
sys.exc_info()
Retourne un tuple de trois valeurs décrivant l’exception en
cours qui est gérée : (type, valeur, traceback), où type est
la classe de l’exception, valeur est l’instance de la classe de
l’exception qui est levée, et traceback un objet qui donne
accès à la pile d’appels du runtime telle qu’elle existait quand
178 Chapitre 1. Python précis et concis
sys.implementation
Disponible à partir de Python 3.3, c’est un objet qui donne des
informations sur l’implémentation de l’interpréteur Python en
cours d’exécution (nom, version, etc.). Voir le manuel Python.
sys.int_info
Détails de l’implémentation Python des nombres entiers via
des attributs (voir le manuel Python).
sys.intern(string)
Entre string dans la table des chaînes « internées » et retourne
cette chaîne ou une copie. Ces chaînes internées améliorent
un peu la recherche dans les dictionnaires : si les clés d’un dic-
tionnaire et la clé de recherche sont internées, la comparaison
des clés (après le hachage) peut être effectuée en comparant
des pointeurs au lieu de chaînes. Normalement, les noms
utilisés dans les programmes Python sont automatiquement
internés, et les dictionnaires utilisés pour stocker les attributs
des modules, des classes et des instances ont des clés internées.
sys.last_type, sys.last_value, sys.last_traceback
Objets type, valeur et traceback de la dernière exception qui
n’a pas été interceptée (ceci est surtout utilisé pour le débogage
après un plantage).
sys.maxsize
Entier fournissant la valeur maximale d’une variable de type
Py_ssize_t. En général cette valeur est égale à 2**31 1 sur
les plateformes 32 bits et 2**63 1 sur les plateformes 64 bits.
sys.maxunicode
Entier fournissant le code maximal d’un caractère Unicode.
En Python 3.3 et dans les versions suivantes, c’est toujours
1114111 (0x10FFFF en hexadécimal) en raison du système de
stockage des chaînes de taille variable en 3.3. Avant la version
3.3, la valeur dépend de l’option de configuration qui spécifie
si les caractères Unicode sont stockés en tant que UCS-2 ou
UCS-4, soit 0xFFFF ou 0x10FFFF.
sys.modules
Dictionnaire des modules qui sont déjà chargés ; il y a une
entrée nom:objet par module. Conseil : ce dictionnaire peut
être modifié pour avoir une incidence sur les futurs imports
(par exemple, del sys.modules[’nom’] force un module à se
recharger lors du prochain import).
Module sys 181
sys.path
Liste des chaînes spécifiant le chemin de recherche de
l’import des modules. Initialisée à partir de la variable du shell
PYTHONPATH, de tout fichier de chemins .pth, et de toute
valeur par défaut dépendante de l’installation. Conseil : cet
attribut et sa liste peuvent être tous les deux modifiés pour
avoir une incidence sur les futurs imports (par exemple,
sys.path.append(’C:\\dir’) ajoute de manière dynamique
un répertoire au chemin de recherche des modules).
Le premier élément, path[0], est le dictionnaire contenant
le script qui a été utilisé pour invoquer l’interpréteur Python.
Si le répertoire du script n’est pas disponible (par exemple, si
l’interpréteur est invoqué de façon interactive ou si le script
est lu à partir de l’entrée standard), path[0] est une chaîne
vide qui indique à Python de rechercher d’abord les modules
dans le répertoire de travail en cours. Le répertoire du script est
inséré avant les entrées insérées à partir de PYTHONPATH. Voir
aussi la section Instruction import.
sys.platform
Chaîne identifiant le système sur lequel Python s’exécute :
’win32’ , ’darwin’ , ’linux2’ , ’cygwin’ , ’os2’, ’freebsd8’ ,
’sunos5’ , ’PalmOS3’ , etc. Ceci est utile pour les tests sur du
code spécifique à une plateforme.
La valeur ’win32’ est valable pour toutes les versions de
Windows, mais on teste en général sys.platform[:3]==’win’
ou sys.platform.startswith(’win’). À partir de Python
3.3, toutes les plateformes Linux sont égales à ’linux’,
mais les scripts doivent de la même manière tester avec
str.startswith(’linux’) car autrefois on utilisait ’linux2’
ou ’linux3’.
sys.prefix
Fournit une chaîne donnant le préfixe du répertoire
spécifique au site, où les fichiers Python spécifiques à
la plateforme sont installés ; la valeur par défaut est
/usr/local ou un argument passé pendant la compilation.
Les modules de la librairie Python sont installés dans le
répertoire <prefix>/lib/python<version> ; les fichiers des
en-têtes indépendants de la plateforme sont stockés dans
<prefix>/include/python<version>.
182 Chapitre 1. Python précis et concis
sys.ps1
Chaîne spécifiant le prompt principal en mode interactif ; la
valeur par défaut est >>> à moins que l’on ait assigné une autre
valeur.
sys.ps2
Chaîne spécifiant le prompt secondaire en mode interactif
pour la continuation des instructions composées ; la valeur par
défaut est ... à moins que l’on ait assigné une autre valeur.
sys.setcheckinterval(reps)
Remplacée en Python 3.2 et dans les versions suivantes par
setswitchinterval() (étudiée dans cette liste). En 3.2 et les
versions ultérieures, cette fonction est toujours présente, mais
n’a pas d’effet, car l’implémentation de la commutation des
threads et des tâches asynchrones a été réécrite.
En Python 3.1 et dans les versions antérieures, la fonction est
appelée pour définir la périodicité du contrôle des tâches par
l’interpréteur (par exemple, commutation des threads, gestion-
naires de signaux) dans reps, qui est mesurée en instructions
de machine virtuelle (la valeur par défaut est 100). En général,
une instruction Python est traduite en plusieurs instructions
de machine virtuelle. Les valeurs inférieures favorisent le
caractère réactif des threads, mais accroissent la surcharge due
à la commutation des threads.
sys.setdefaultencoding(nom)
Supprimée à partir de Python 3.2. Cette fonction sert à définir
l’encodage en cours par défaut utilisé par l’implémentation
Unicode dans nom. Conçue pour être utilisée par le module
site , elle n’est disponible que pendant le démarrage.
sys.setprofile(fonction)
Cette fonction sert à définir la fonction de profil du système à
fonction. Reportez-vous au manuel de la librairie de référence
de Python pour les détails.
sys.setrecursionlimit(profondeur)
Cette fonction sert à définir la profondeur maximum de la
pile d’appels Python à profondeur. Cette limite empêche la
récursivité infinie de provoquer un débordement de la pile C et
de planter Python. La valeur par défaut est 1 000 sous Windows,
mais cela peut varier. Des valeurs supérieures peuvent être
nécessaires pour des fonctions hautement récursives.
Module sys 183
sys.setswitchinterval(intervalle)
En Python 3.2 et dans les versions ultérieures, définit l’inter-
valle de commutation des threads de l’interpréteur à inter-
valle, qui est exprimé en secondes. Il s’agit d’une valeur
en virgule flottante (par exemple, 0.005 correspond à 5 mil-
lisecondes) qui détermine la durée idéale des tranches de
temps allouées aux threads Python s’exécutant en même temps.
La valeur réelle peut être supérieure, particulièrement si des
fonctions internes ou des méthodes qui durent longtemps sont
utilisées, et que le choix de l’ordonnancement des threads à
la fin de l’intervalle est réalisé par le système d’exploitation
(l’interpréteur Python n’a pas son propre ordonnanceur).
En Python 3.1 et dans les versions antérieures, utilisez setche-
ckinterval() à la place (étudiée dans cette liste).
sys.settrace(fonction)
Cette fonction sert à définir la fonction de trace du système
à fonction. Il s’agit de l’emplacement du programme ou de
la fonction callback de modification d’état utilisés par les
débogueurs, etc. Reportez-vous au manuel de la librairie de
référence de Python pour les détails.
sys.stdin
Objet fichier pré-ouvert, connecté initialement au flux d’entrée
standard, stdin. Peut être assigné à n’importe quel objet avec
des méthodes read pour réinitialiser l’entrée au sein d’un
script (par exemple, sys.stdin = MyObj()). Ceci est utilisé
pour l’entrée de l’interpréteur, notamment la fonction intégrée
input() (et raw_input() en Python 2.X).
sys.stdout
Objet fichier pré-ouvert, connecté initialement au flux de
sortie standard, stdout. Peut être assigné à n’importe quel objet
avec des méthodes write pour réinitialiser la sortie au sein d’un
script (par exemple, sys.stdout=open(’log’, ’a’)). Ceci est
utilisé pour certains prompts et la fonction intégrée print() (et
l’instruction print en Python 2.X). Utilisez PYTHONIOENCODING
pour contourner l’encodage dépendant de la plateforme si
nécessaire (voir la section Variables d’environnement Python), et
l’option -u pour les flux sans tampon (voir la section Options
de la commande Python).
184 Chapitre 1. Python précis et concis
sys.stderr
Objet fichier pré-ouvert, connecté initialement au flux d’erreur
standard, stderr. Peut être assigné à n’importe quel objet avec
des méthodes write pour réinitialiser stderr au sein d’un script
(par exemple, sys.stderr=wrappedsocket). Utilisé pour des
erreurs dans les prompts de l’interpréteur.
sys.__stdin__, sys.__stdout__, sys.__stderr__
Valeurs originales de stdin, stderr et stdout au démarrage
du programme (par exemple, pour restaurer ces valeurs en
dernier recours ; normalement, quand on assigne des valeurs à
sys.stdout, etc., on sauvegarde les anciennes valeurs pour les
restaurer dans une clause finally). Note : ces valeurs peuvent
être égales à None pour les applications en mode graphique sous
Windows sans console.
sys.thread_info
Détails de l’implémentation des threads Python via les attri-
buts ; nouveau en Python 3.3 (voir le manuel Python).
sys.tracebacklimit
Nombre maximum de niveaux de traceback à afficher pour les
exceptions qui ne sont pas interceptées ; la valeur par défaut
est 1 000 à moins d’avoir assigné une autre valeur.
sys.sys.version
Chaîne contenant le numéro de version de l’interpréteur
Python.
sys.version_info
Tuple contenant cinq éléments permettant d’identifier la ver-
sion de Python : majeur, mineur, micro, niveau de release,
et numéro de série. Pour Python 3.0.1, le tuple suivant est
retourné : (3, 0, 1, ’final’, 0). Dans les versions récentes,
il s’agit d’un tuple nommé dont on peut accéder aux élé-
ments par leur numéro ou bien par des noms d’attributs ;
pour Python 3.3.0, cela affiche sys.version_info(major=3,
minor=3, micro=0, releaselevel=’final’, serial=0). Voir
la documentation de la librairie Python pour de plus amples
détails.
sys.winver
Numéro de version utilisé pour former les clés de registre sur les
plateformes Windows (disponible uniquement sous Windows ;
voir la documentation de la librairie Python).
Module string 185
MODULE STRING
Fonctions et classes
À partir de Python 2.0, la plupart des fonctions de ce module sont
aussi disponibles sous la forme de méthodes d’objets string ; les appels
qui sont basés sur des méthodes sont d’ailleurs plus efficaces et préférés
en 2.X, pour ne devenir que la seule option retenue en 3.X. Voir la
section Chaînes pour les détails et la liste de toutes les méthodes de
chaînes disponibles qui ne sont pas répétées ici. Seuls les éléments
que l’on ne trouve que dans le module string sont listés dans cette
section :
string.capwords(s, sep=None)
Sépare l’argument s en mots en utilisant s.split(), met en
majuscule l’initiale de chaque mot avec s.capitalize(), et
recombine ces mots avec s.join(). Si l’argument optionnel
sep est absent ou est égal à None, les groupes d’espaces sont rem-
placés par un seul space, et les espaces encadrant la chaîne sont
supprimés ; sinon, sep est utilisé pour séparer et recombiner les
mots.
string.maketrans(depuis, vers)
Retourne une table de traduction qui est passée à
bytes.translate() et qui fait correspondre chaque caractère
du paramètre depuis au caractère à la même position du
paramètre vers ; depuis et vers doivent avoir la même
longueur.
string.Formatter
Classe qui autorise la création de mises en forme personnalisées
en utilisant le même mécanisme que la méthode str.format(),
qui est décrite dans la section Méthode de mise en forme de
chaînes.
string.Template
Classe de substitution de modèles de chaînes, qui est décrite
dans la section Modèles de substitutions de chaînes.
186 Chapitre 1. Python précis et concis
Constantes
string.ascii_letters
La chaîne ascii_lowercase + ascii_uppercase.
string.ascii_lowercase
La chaîne ’abcdefghijklmnopqrstuvwxyz’ ; elle ne dépend pas
des paramètres régionaux et ne sera pas modifiée.
string.ascii_uppercase
La chaîne ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’ ; elle ne dépend pas
des paramètres régionaux et ne sera pas modifiée.
string.digits
La chaîne ’0123456789’.
string.hexdigits
La chaîne ’0123456789abcdefABCDEF’.
string.octdigits
La chaîne ’01234567’.
string.printable
Combinaison de constantes digits, ascii_letters, punctuation
et whitespace.
string.punctuation
Chaîne des caractères qui sont considérés comme des signes de
ponctuation dans les paramètres régionaux.
string.whitespace
Chaîne contenant l’espace, la tabulation, le saut de ligne, le
retour de chariot, la tabulation verticale et le saut de page : ’
\t\n\r\v\f’.
MODULE SYSTÈME OS
pour les processus), getopt, optparse, et, en 3.2 et dans les versions
suivantes, argparse (traitement de ligne de commande).
Outils d’administration
Constantes de portabilité
Cette section décrit les outils de portabilité de fichiers, pour les réper-
toires et les chemins de recherche, les sauts de ligne, etc. Ces
constantes, qui sont définies automatiquement avec la valeur appro-
priée correspondant à la plateforme sur laquelle un script s’exécute,
sont utiles à la fois pour l’analyse et la création des chaînes dépen-
dantes des plateformes. Voir aussi la section Module os.path :
Module système os 189
os.curdir
Chaîne utilisée pour représenter le répertoire en cours (par
exemple, . pour Windows et POSIX, : pour Macintosh).
os.pardir
Chaîne utilisée pour représenter le répertoire parent (par
exemple, .. pour POSIX, :: pour Macintosh).
os.sep
Chaîne utilisée pour séparer les répertoires (par exemple, /
pour Unix, \ pour Windows, ou : pour Macintosh).
os.altsep
Chaîne de séparateur alternatif ou None (par exemple, / pour
Windows).
os.extsep
Caractère qui sépare le nom du fichier de son extension (par
exemple, .).
os.pathsep
Caractère utilisé pour séparer les composants du chemin de
recherche, comme dans les variables du shell PATH et PYTHON-
PATH (par exemple, ; pour Windows, : pour Unix).
os.defpath
Chemin de recherche par défaut utilisé par les appels
os.exec*p* s’il n’y a pas de paramètre PATH dans le shell.
os.linesep
Chaîne utilisée pour terminer les lignes sur la plateforme en
cours (par exemple, \n pour POSIX, \r pour Mac OS, et
\r\n pour Windows). Ceci n’est pas obligatoire pour l’écriture
des lignes des fichiers en mode texte (utilisez la traduction
automatique de ’\n’ des objets file ; voir open() dans la section
Fonctions intégrées).
os.devnull
Chemin du fichier du device « null » (pour le texte à ignorer).
Il s’agit de ’/dev/null’ pour POSIX, et ’nul’ pour Windows
(présent aussi dans le sous-module os.path).
Commandes du shell
Ces fonctions exécutent des lignes de commandes ou des fichiers dans le
système d’exploitation sous-jacent. En Python 2.X, ce module a des
fonctions os.popen2/3/4 qui ont été remplacées en Python 3.X par
subprocess.Popen, un outil offrant généralement un contrôle plus
190 Chapitre 1. Python précis et concis
Utilitaires d’environnement
Ces attributs exportent le contexte d’exécution : environnement du
shell, répertoire en cours, et ainsi de suite :
os.environ
C’est un objet comparable à un dictionnaire qui est la variable
d’environnement du shell. os.environ[’USER’] est la valeur
de la variable USER du shell (équivalent à $USER sous Unix et
%USER% sous Windows) qui est initialisée au démarrage du pro-
gramme. Les modifications faites à os.environ par l’assignation
de clés sont exportées en dehors de Python grâce à un appel
à la fonction C putenv() et sont héritées par les processus qui
sont engendrés ultérieurement de quelque manière que ce soit,
ainsi que par tout code C lié. Voir aussi le manuel Python pour
l’interface bytes de l’environnement os.environb en Python
3.2 et dans les versions ultérieures.
os.putenv(nom_variable, valeur)
Définit la variable d’environnement du shell nommée
nom_variable avec la chaîne valeur. Assigne les
sous-processus démarrés avec system(), popen(), spawnv(),
fork() et execv(), ainsi que d’autres fonctions. L’assignation
192 Chapitre 1. Python précis et concis
Note
Le « descripteur de fichier » dont il est question ici est différent
des « descripteurs » de classes (voir la section Méthodes pour les
descripteurs pour ces derniers). Notez aussi que Python 3.4 prévoit
de modifier les descripteurs de fichiers pour qu’ils ne soient plus
hérités par défaut dans les sous-processus et de fournir de nou-
velles fonctions get_inheritable(fd) et set_inheritable(fd,
boolean) dans os pour gérer ce comportement par défaut.
os.close(fd)
Ferme le descripteur de fichierfd (pas un objet fichier).
os.dup(fd)
Retourne un double du descripteur de fichierfd.
os.dup2(fd, fd2)
Copie le descripteur de fichierfd vers fd2 (ferme d’abord fd2
s’il est ouvert).
os.fdopen(fd, *args, **kwargs)
Retourne un objet fichier stdio connecté au descripteur de
fichierfd (un entier). Il s’agit d’un alias de la fonction intégrée
open() qui accepte les mêmes arguments, sauf que le premier
argument de fdopen() doit toujours être un descripteur de
fichier exprimé par un entier (voir open() dans la section
Fonctions intégrées). Une conversion des fichiers basés sur un
descripteur de fichier vers les objets fichier est normalement
réalisée automatiquement par la fonction open(). Conseil :
194 Chapitre 1. Python précis et concis
os.pipe()
Créer un pipe anonyme. Voir la section Contrôle des processus.
os.read(fd, n)
Lit au plus n octets à partir du descripteur de fichierfd et
retourne ces octets sous la forme d’une chaîne.
os.write(fd, str)
Écrit tous les octets de la chaîne str dans le descripteur de
fichierfd.
Tableau 18 — Options pour os.open (os.flag)
os.listdir(path)
Retourne une liste de noms de toutes les entrées du chemin
du répertoire. Il s’agit d’une alternative rapide et portable à la
fonction glob.glob(motif) et à l’exécution des commandes
de listing du shell avec os.popen(). Voir aussi le module glob
dans le manuel Python pour le développement des motifs des
noms de fichiers, et os.walk() plus loin dans cette section pour
le parcours complet de l’arborescence des répertoires.
En Python 3.X, cette fonction passe et retourne des bytes
au lieu de str afin de supprimer le décodage des noms de
fichiers Unicode par défaut (ce comportement s’applique aussi
à glob.glob() et os.walk()). En Python 3.2 et dans les ver-
sions ultérieures, path est égal par défaut à "." s’il est omis,
c’est-à-dire le répertoire de travail en cours.
os.lstat(path)
Similaire à os.stat(), mais ne suit pas les liens symboliques.
os.mkfifo(path [, mode=0o666])
Crée une structure FIFO (premier entré, premier sorti, que l’on
appelle aussi pipe nommé) identifiée par la chaîne path avec
des permissions d’accès accordées par un mode numérique (mais
sans ouverture). Le mode par défaut est égal à 0o666 (octal).
La valeur umask en cours est d’abord marquée à partir du mode.
Cette fonction a un argument nommé optionnel dir_fd en
3.3.
Les structures FIFO sont des pipes qui résident dans le système
de fichiers et qui peuvent être ouvertes et traitées comme
des fichiers normaux, mais qui prennent en charge les accès
synchronisés entre les clients démarrés indépendamment et
les serveur, grâce à des noms de fichiers communs. Les FIFO
existent jusqu’à leur suppression. Cette fonction est disponible
actuellement sur les plateformes de type Unix, notamment
Cygwin sous Windows, mais pas dans le Python standard sous
Windows. Les sockets peuvent souvent accomplir des tâches
similaires (voir le module socket dans la section Outils et
modules Internet ainsi que le manuel Python).
os.mkdir(path [, mode])
Crée un répertoir appelé path, avec le mode passé en paramètre.
Le mode par défaut est égal à 0o777 (octal).
Module système os 197
os.makedirs(path [, mode])
Fonction récursive de création de répertoires. Similaire à
mkdir(), mais crée tous les répertoires de niveau intermédiaire
nécessaires pour contenir le répertoire final de l’arborescence.
Lève une exception si le répertoire final existe déjà ou ne peut
pas être créé. Le mode par défaut est égal à 0o777 (octal). En
Python 3.2 et dans les versions ultérieures, cette fonction a un
argument supplémentaire optionnel exists_ok ; voir le manuel
Python.
os.readlink(path)
Retourne le chemin référencé par un lien symbolique path.
os.remove(path), os.unlink(path)
Supprime le fichier nommé path. remove() est idenfique à
unlink(). Voir aussi rmdir() et removedirs() dans cette liste
pour la suppression des répertoires.
os.removedirs(path)
Fonction récursive de suppression de répertoires. Similaire
à rmdir(), mais si le répertoire final de l’arborescence est
supprimé avec succès, les répertoires parents sont supprimés
les uns après les autres jusqu’à ce que le chemin complet soit
détruit ou qu’une erreur se produise. Lève une exception si le
répertoire final ne peut pas être supprimé.
os.rename(srcpath, dstpath)
Renomme (déplace) le fichier srcpath en dstpath. Voir aussi
os.replace() à partir de Python 3.3.
os.renames(oldpath, newpath)
Fonction récrusive pour renommer un fichier ou un répertoire.
Similaire à rename(), mais la création des répertoires intermé-
diaires pour réaliser le nouveau chemin valide est tentée en
premier. Après le changement de nom, les répertoires parents
de l’ancien nom sont supprimés à l’aide de removedirs().
os.rmdir(path)
Supprime le répertoire nommé path.
os.stat(path)
Exécute la fonction système stat pour path ; retourne un
tuple d’entiers avec des informations de bas niveau (dont les
éléments sont définis et traités par les outils du module de
librairie standard stat).
198 Chapitre 1. Python précis et concis
os.symlink(srcpath, dstpath)
Crée un lien symbolique vers le fichire srcpath, appelé dst-
path.
os.utime(path, (atime, mtime))
Définit l’horodatage de l’accès et de la modification du fichier
path.
os.access(path, mode)
Consultez la documentation de la librairie Python ou le manuel
Unix pour les détails.
os.walk(...)
os.walk(top
[, topdown=True
[, onerror=None]
[, followlinks=False]]])
Les fonctions suivantes sont utilisées pour créer et gérer les processus
et les programmes. Voir aussi la section Commandes du shell pour étudier
d’autres manières de démarrer les programmes et les fichiers. Conseil :
n’utilisez pas ces outils pour lancer des chaînes de commandes du
shell qui ne sont pas sûres car elles peuvent exécuter toute commande
autorisée par le processus Python :
os.abort()
Envoie un signal SIGABRT au processus en cours. Sous Unix,
le comportement par défaut est de produire un dump, et
sous Windows, le processus retourne immédiatement un code
d’erreur 3.
os.execl(path, arg0, arg1,...)
Équivalent à execv(path, (arg0, arg1,...)).
os.execle(path, arg0, arg1,..., env)
Équivalent à execve(path, (arg0, arg1,...), env).
os.execlp(path, arg0, arg1,...)
Équivalent à execvp(path, (arg0, arg1,...)).
200 Chapitre 1. Python précis et concis
os.kill(pid, sig)
Envoie le signal sig au processus ayant l’identifiant pid, ce qui
peut éventuellement le tuer (avec certains types de signaux).
Voir aussi le module de la librairie standard signal dans le
manuel Python pour les constantes des signaux et l’enregistre-
ment des gestionnaires de signaux.
os.mkfifo(path [, mode])
Voir la section précédente Utilitaires de noms de chemins de
fichiers (fichiers nommés utilisés pour la synchronisation de
processus).
os.nice(incrément)
Ajoute incrément au gestionnaire de priorité du processus
(c’est-à-dire diminue la priorité CPU).
os.pipe()
Retourne un tuple de descripteurs de fichiers (readfd, wri-
tefd) pour lire et écrire un nouveau pipe anonyme (sans nom).
Utilisée pour la communication inter-process des processus qui
sont liés.
os.plock(op)
Verrouille en mémoire les segments du programme. op (défini
dans <sys./lock.h>) détermine les segments à verrouiller.
os.spawnv(mode, path, args)
Exécute le programme path dans un nouveau processus, en
lui passant les arguments spécifiés dans args sous la forme
d’une ligne de commande. args peut être une liste ou un tuple.
mode est une constante opérationnelle composée des noms
suivants qui sont également définis dans le module os : P_WAIT,
P_NOWAIT, P_NOWAITO, P_OVERLAY et P_DETACH. Sous Windows,
cela correspond approximativement à une combinaison de
fork() et de execv() (fork() n’est pas disponible sur le Python
standard sous Windows, bien que ce soit le cas de popen()
et system()). Voir aussi le module subprocess de la librairie
standard pour des alternatives plus riches fonctionnellement
(voir la section Module subprocess).
os.spawnve(mode, path, args, env)
Similaire à spawnv(), mais passe le contenu du mapping env
en tant que variables d’environnement du shell du programme
engendré (sinon, le processus hérite du processus parent).
202 Chapitre 1. Python précis et concis
os.wait()
Attend la fin du processus enfant. Retourne un tuple contenent
l’identifiant de l’enfant et l’état de sortie.
os.waitpid(pid, options)
Attend la fin du processus enfant ayant le numéro pid. options
est égal à 0 en utilisation normale, ou os.WNOHANG pour éviter
un blocage si aucun état de processus enfant n’est disponible.
Si pid est égal à 0, la demande s’applique à n’importe quel
enfant du groupe des processus du processus en cours. Voir
aussi les fonctions de contrôle de l’état de sortie des processus
dans la documentation de la librairie Python (par exemple,
WEXITSTATUS(status) pour extraire le code de sortie).
Module os.path
Le module os.path fournit des services supplémentaires pour gérer les
noms de chemins de répertoires et des outils de portabilité. Il s’agit
d’un module imbriqué : ses noms sont imbriqués dans le module os au
sein du sous-module os.path (par exemple, la fonction exists peut
être obtenue en important os et en utilisant le nom os.path.exists).
La plupart des fonctions de ce module ont un argument path,
qui représente le nom de chemin du répertoire d’un fichier (par
exemple, ’C:\dir1\spam.txt’ ). Les chemins de répertoires sont en
général codés selon les conventions de la plateforme et sont associés
au répertoire de travail en cours si aucun préfixe de répertoire n’est
fourni. Conseil : le slash fonctionne en général comme séparateur de
répertoire sur toutes les plateformes. En Python 2.X, ce module inclut
un outil os.path.walk() qui a été remplacé par os.walk() en Python
3.X (voir la section Utilitaires de noms de chemins de fichiers) :
os.path.abspath(path)
Retourne une version absolue normalisée de path.
Sur la plupart des plateformes, cela est équivalent à
normpath(join(os.getcwd(), path)).
os.path.basename(path)
Similaire à la seconde moitié de la paire retournée par
split(path).
os.path.commonprefix(liste)
Retourne le préfixe de chemin le plus long (caractère par
caractère) qui est un préfixe de tous les chemins de liste.
Module système os 203
os.path.dirname(path)
Similaire à la première moitié de la paire retournée par
split(path).
os.path.exists(path)
True si la chaîne path est le nom d’un chemin existant.
os.path.expanduser(path)
Retourne une chaîne qui contient path et incorpore le nom de
l’utilisateur précédé du caractère ~.
os.path.expandvars(path)
Retourne une chaîne qui contient path et incorpore les vari-
rables d’environnement $.
os.path.getatime(path)
Retourne l’horodatage du dernier accès à path (nombre de
secondes écoulées depuis epoch, qui est la date à partir de
laquelle les dates sont gérées par le système et qui dépend de la
plateforme ; epoch sous Unix est égale à 01/01/1970).
os.path.getmtime(path)
Retourne l’heure de la dernière modification de path (nombre
de secondes écoulées depuis epoch).
os.path.getsize(path)
Retourne la taille en octets du fichier path.
os.path.isabs(path)
True si la chaîne path est un chemin absolu.
os.path.isfile(path)
True si la chaîne path est un fichier régulier.
os.path.isdir(path)
True si la chaîne path est un répertoire.
os.path.islink(path)
True si la chaîne path est un lien symbolique.
os.path.ismount(path)
True si la chaînepath est un point de montage.
os.path.join(path1 [, path2 [, ...]])
Combine de manière intelligente plusieurs composants de che-
mins (en employant les conventions de séparateurs spécifiques
à la plateforme entre chaque composant).
os.path.normcase(path)
Normalise la casse d’un chemin. Cela n’a aucun effet sous
Unix ; sur les systèmes de fichiers qui ne font pas différence
entre minuscules et majuscules, la fonction convertit en minus-
cules ; sous Windows, la fonction convertit aussi le / en \.
204 Chapitre 1. Python précis et concis
os.path.normpath(path)
Normalise un nom de chemin. Supprime les séparateurs redon-
dants et les références au répertoire parent ; sous Windows, la
fonction convertit le / en \.
os.path.realpath(path)
Retourne le chemin canonique du fichier spécifié, en éliminant
les liens symboliques se trouvant dans le chemin.
os.path.samefile(path1, path2)
True si les deux arguments font référence au même fichier ou
au même répertoire.
os.path.sameopenfile(fp1, fp2)
True si les deux objets fichier font référence au même fichire.
os.path.samestat(stat1, stat2)
True si les deux tuples stat font référence au même fichire.
os.path.split(path)
Découpe le paramètre path en (head, tail), où tail est le der-
nier composant du chemin et head tout ce qui se trouve avant
tail. Similaire au tuple (dirname(path), basename(path)).
os.path.splitdrive(path)
Découpe path en une paire (’lecteur:’, tail) (sous Win-
dows).
os.path.splitext(path)
Découpe path en (root, ext), où le dernier composant de root
ne contient pas de point et où ext est vide ou commence par
un point.
os.path.walk(path, visitor, data)
Alternative à os.walk() uniquement en Python 2.X, et basée
sur la fonction callback de gestionnaire de répertoires visitor
avec l’état data, à la place d’un générateur de répertoires.
Supprimée en Python 3.X : utilisez os.walk(), et non pas
os.path.walk().
Fonctions du module
L’interface de haut niveau du module comprend des outils qui
recherchent une correspondance immédiate ou qui précompilent des
motifs, et créent des objets motif (pobj à cause de l’anglais pattern que
nous avons traduit par motif) et des objets correspondance (mobj à
cause de l’anglais match que nous avons traduit par correspondance)
définis dans les sections ci-dessous :
re.compile(pattern [, flags])
Compile une chaîne pattern dans un objet motif (pobj),
pour une correspondance ultérieure. flags (combinable avec
l’opérateur | de comparaison bit à bit) comprend les options
suivantes qui sont disponibles au niveau supérieur du module
re :
re.A ou re.ASCII ou (?a)
Fait accomplir à \w, \W, \b, \B, \s et \S une correspondance uni-
quement en ASCIIau lieu d’une correspondance en Unicode.
Cela n’a d’intérêt que pour les motifs uniquement en Unicode
et cette option est ignoré pour les motifs exprimées sous forme
d’octets. Notez que pour des raisons de rétro-compatibilité, l’op-
tion re.U existe toujours (ainsi que son synonyme re.UNICODE
et son équivalent ?u), mais elle est redondante en Python 3.X
puisque les correspondances sont par défaut en Unicode pour
les chaînes (et la correspondance Unicode n’est pas autorisée
pour les octets).
re.I ou re.IGNORECASE ou (?i)
Correspondance ne faisant pas la différence entre les majus-
cules et les minuscules.
re.L ou re.LOCALE ou (?L)
Rend \w, \W, \b, \B, \s, \S, \d et \D dépendantes des paramètres
régionaux en cours (Unicode est la valeur par défaut en Python
3.X).
re.M ou re.MULTILINE ou (?m)
Correspondance pour chaque nouvelle ligne, et non pas la
chaîne complète.
re.S ou re.DOTALL ou (?s)
206 Chapitre 1. Python précis et concis
Objets pattern
Objets match
Les objets match (mobj) sont retournés à la suite d’opération réussies
match() et search() ; ils ont les attributs suivants (voir la documen-
tation de la librairie Python pour les autres attributs moins courants
que nous avons omis ici) :
mobj.pos, mobj.endpos
Valeurs de pos et endpos passées à search ou match.
mobj.re
Objet pattern dont les fonctions match ou search ont produit
cet objet match (voir sa chaîne pattern).
mobj.string
Chaîne passée à match ou search.
mobj.group([g [, g]*)
Retourne une sous-chaînes dont la correspondance a été trouvé
par des groupes entre parenthèses dans le motif. Accepté zéro
ou plusieurs identificateurs de numéro ou de nom de groupe g,
impliqués par les motifs (R) et (?P<nom>R), respectivement.
S’il n’y qu’un argument, le résultat est la sous-chaîne qui
correspond au groupe dont l’identificateur a été passé. S’il y
a plusieurs arguments, le résultats est un tuple avec une sous-
chaîne qui correspond par argument. S’il n’y a pas d’argument,
retourne la totalité de la sous-chaîne qui correspond. Si un
numéro de groupe est égal à 0, la valeur de retour est la totalité
de la chaîne correspondante ; dans le cas contraire, retourne
une chaîne qui correspond aux groupes entre parenthèses. Les
groupes dans le motif sont numérotés dans la plage 1...N, de
gauche à droite.
mobj.groups()
Retourne un tuple de tous les groupes de la correspondance ;
les groupes qui ne participent pas à la correspondance ont une
valeur None.
mobj.groupdict()
Retourne un dictionnaire contenant tous les sous-groupes nom-
més de la correspondance, indexés sur le nom du sous-groupe.
mobj.start([g]), mobj.end([g])
Indixes de début et de fin de la sous-chaîne en correspon-
dance avec le groupe g (ou la totalité de la chaîne en cor-
respondance, s’il n’y a pas de group). Pour un objet match M,
M.string[M.start(g):M.end(g)] == M.group(g).
Module de recherche de motifs par expressions régulières 209
mobj.span([g])
Retourne le tuple (mobj.start(g), mobj.end(g)).
mobj.expand(template)
Retourne la chaîne obtenue en faisant la substitution des
caractères antislash dans la chaîne template, comme cela
est fait dans la méthode sub. Les caractères d’échappement,
comme \n, sont convertis dans les caractères appropriés, et
les références numériques avec un antislash (par exemple,
\1, \2) et les références avec un nom précédé d’un antislash
(par exemple, \g<1>, \g<name>) sont remplacées par le groupe
correspondant.
>>> import re
>>> pobj = re.compile(’hello[ \t]*(.*)’)
>>> mobj = pobj.match(’hello world!’)
>>> mobj.group(1)
’world!’
Forme Description
Tableau 19 — (suite)
Séquence Description
shelve
Stockage d’objets persistants basés sur des clés : stocke les
objets dans des fichiers dbm sous la forme de pickle.
Note
En Python 2.X, dbm s’appelle anydbm, et le module cPickle est une
version optimisée de pickle qui peut être importée directement
et qui est utilisée directement par shelve, s’il est présent. En
Python 3.X, cPickle, qui a été renommé _pickle, est utilisé
automatiquement par pickle s’il est présent (il n’a pas besoin
d’être importé directement car il est acquis par shelve).
Vous noterez aussi qu’en Python 3.X l’interface de Berkeley
DB (bsddb) pour dbm n’est plus livrée avec Python, mais une
extension open source tierce, qui doit être installée séparément
si nécessaire (voir la documentation de la librairie Python 3.X
pour des informations complémentaires).
Ouvertures de fichiers
Pour shelve, importez la librairie, puis appelez sa fonction open()
pour créer un nouveau fichier shelve ou en ouvrir un existant :
import shelve
file = shelve.open(nom_de_fichier
[, flag=’c’
[, protocol=None
[, writeback=False]]])
import dbm
file = dbm.open(nom_de_fichier
[, flag=’r’
[, mode]])
Module pickle) utilisé pour stocker les objets shelve ; sa valeur par
défaut est égale à 0 en Python 2.X, et actuellement à 3 en Python
3.X.
Par défaut, les modifications des objets récupérés dans des objets
shelve ne sont pas écrites automatiquement sur disque. Si le paramètre
optionnel writeback est défini à True, toutes les entrées auxquelles
on a accédé sont mises en mémoire cache, puis écrites sur disque à la
fermeture ; cela facilite la modification des entrées mutables dans les
objets shelve, mais cela peut consommer de la mémoire cache, ce qui
ralentit l’opération de fermeture car toutes les entrées auxquelles on
a accédé sont écrites sur le disque. Réassignez les objets à leurs clés
pour mettre à jour les objets shelve manuellement.
fichier[clé] = valeur
valeur = fichier[clé]
count = len(fichier)
index = fichier.clés()
del fichier[clé]
fichier.close()
Module pickle
Le module pickle est un outil de sérialisation d’objet : il convertit des
objets Python en mémoire presque arbitraires vers/depuis des flux
linéaires d’octets. Ces flux d’octets peuvent être dirigés vers n’importe
quel objet fichier qui possède les méthodes de lecture et d’écriture qui
conviennent et qui sont utilisées par shelve pour sa représentation
des données internes. L’opération de unpickling recrée l’objet original
en mémoire, avec la même valeur, mais une nouvelle identité (adresse
mémoire).
Reportez-vous à la note précédente sur les modules optimisés
Python 2.X cPickle et Python 3.X’s _pickle. Consultez aussi la
méthode makefile des objets socket pour le transport des objets
sérialisés sur les réseaux sans appels manuels à des objets socket (voir
la section Outils et modules Internet et le manuel Python).
Interfaces de pickling
Ce module prend en charge les appels suivants :
P = pickle.Pickler(objet_fichier [, protocole=None])
P.dump(objet)
Interfaces de unpickling
Ce module prend en charge les appels suivants :
U = pickle.Unpickler(objet_fichier,
encoding="ASCII", errors="strict")
objet = U.load()
objet = pickle.load(objet_fichier,
encoding="ASCII", errors="strict")
objet = pickle.loads(string,
encoding="ASCII", errors="strict")
Note
Au moment de la rédaction de cet ouvrage, il y a eu une proposi-
tion (https://www.python.org/dev/peps/pep-3154) d’un protocole
pickle optimisé ayant pour numéro 4. Ce protocole cible Python
3.4 dans lequel il a été ajouté.
Exemple tkinter
Dans les scripts tkinter, les widgets sont des classes personnalisables
(par exemple, Button, Frame), les options sont des arguments nommés
(par exemple, text="Appuyez"), et la composition fait référence à
l’incorporation des objets, et pas aux noms de chemins (par exemple,
Label(top,...)):
Le tableau 21, Classes des principaux widgets du module tkinter liste les
principales classes de widgets du module tkinter. Il s’agit de classes
Python qui peuvent être sous-classées et incorporées dans d’autres
objets. Pour créer un dispositif graphique à l’écran, créez une instance
de la classe correspondante, configurez-la, puis placez-la avec l’une
des méthodes d’interface de gestion de positionnement (par exemple,
Button(text=’hello’).pack()). En plus des classes du tableau 21,
le module tkinter fournit un large ensemble de noms prédéfinis
(c’est-à-dire des constantes) utilisés pour configurer les widgets (par
exemple, RIGHT, BOTH, YES) ; ces noms sont chargés automatiquement
à partir de tkinter.constants (Tkconstants en Python 2.X).
Tableau 21 — Classes des principaux widgets du module tkinter
Classe de
widget Description
PhotoImage Objet image pour placer des photos en couleur sur d’autres widgets
BitmapImage Objet image pour placer des images bitmap sur d’autres widgets
Scrollbar Barre pour faire défiler d’autres widgets (par exemple, Listbox, Canvas,
Text)
Module et outils graphiques tkinter 221
Tableau 21 — (suite)
Text Widget pour afficher et modifier du texte sur plusieurs lignes, prenant
en charge des polices de caractères, etc.
Canvas Zone de dessin permettant de tracer des lignes, des cercles et d’afficher
des photos et du texte, etc.
askcolor(color=None, **options)
class Open
class SaveAs
class Directory
askopenfilename(**options)
asksaveasfilename(**options)
askopenfile(mode="r", **options)
asksaveasfile(mode="w", **options)
askdirectory(**options)
Maîtres (parents)
Les parents sont des objets créés préalablement, et passés aux
constructeurs de classes de widgets.
Options des widgets
Les options sont des arguments nommés du constructeur ou de
config(), ou des clés indicées.
Opérations
Les opérations des widgets (actions) deviennent des méthodes
des classes de widgets tkinter.
Callbacks
Les gestionnaires de callbacks peuvent être tout objet appe-
lable : fonction, méthode, lambda, classe avace un méthode
__call__, etc.
Extension
Les widgets sont étendus avec le mécanisme d’héritage des
classes Python.
Composition
Les interfaces sont construites en attachant des objets, et pas
en concaténant des noms.
224 Chapitre 1. Python précis et concis
Variables liées
Les variables associées à des widgets sont des objets de classes
tkinter avec des méthodes.
Configuration
.panel.go config -bg red go.config(bg=’red’) go[’bg’] = ’red’
select
S’interface avec la fonction Unix et Windows select().
Attend l’activité d’un ensemble de fichiers ou de sockets.
Courramment utilisé pour le multiplexage de plusieurs flux ou
pour implémenter des temporisations. Fonctionne uniquement
pour les sockets sous Windows, pas pour les fichiers.
cgi
Prise en charge des scripts CGI côté serveur :
cgi.FieldStorage() analyse le flux d’entrée ; cgi.escape()
(et html.escape() dans les versions récentes 3.X) appliques les
conventions d’échappement HTML aux flux de sortie. Pour
analyser et accéder aux informations d’un formulaire : après
l’appel de form=cgi.FieldStorage() par un script CGI, form
est un objet de type dictionnaire avec une entrée par champ
de formulaire (par exemple, form["nom"].value est le texe du
champ nom du formulaire).
urllib.request (urllib, urllib2 en Python 2.X)
Récupère les pages Web et les sorties des scripts
serveur à partir de leurs adresses Internet (les URL) :
urllib.request.urlopen(url) retourne un objet similaire
à un fichier avec des méthodes read, de même que
urllib.request.urlretrieve(remote, local). Prend en
charge HTTP, HTTPS, FTP et les URL de fichiers locaux.
urllib.parse (urlparse en Python 2.X)
Analyse la chaîne d’une URL et extrait ses composants.
Contient aussi des outils pour l’échappement du texte des
URL : urllib.parse.quote_plus(str) réalise l’échappement
de l’URL pour le texte inséré dans les flux de sortie HTML.
ftplib
Modules FTP. ftplib fournit des interfaces pour les trans-
ferts de fichiers Internet dans les programmes Python. Après
ftp=ftplib.FTP(’nom_de_site’), ftp a des méthodes pour se
connecter, changer de répertoire, récupérer/stocker des fichiers
et des listings, etc. Prise en charge des transferts au format
binaire et texte ; fonctionne sur toute machine équipée de
Python et d’une connexion Internet.
poplib, imaplib, smtplib
Modules gérant les protocoles de courrier électronique POP,
IMAP et SMTP.
226 Chapitre 1. Python précis et concis
Package email
Analyse et construit des messages de courrier électronique avec
des en-têtes et des pièces jointes. Assure également la prise en
charge de MIME à la fois pour le contenu et les en-têtes.
http.client (httplib en Python 2.X), nntplib, telnetlib
Modules clients pour les protocoles HTTP, NNTP (news) et
Telnet.
http.server (CGIHTTPServer, SimpleHTTPServer en
Python 2.X)
Implémentation du serveur de requêtes HTTP.
Packages xml, html (htmllib en Python 2.X)
Analyse les documents XML et HTML ainsi que le contenu
des pages Web. Le package xml prend en charge DOM, SAX
et les modèles d’analyse ElementTree, avec Expat.
Package xmlrpc (xmlrpclib en Python 2.X)
Protocole d’appel de méthodes distances XML-RPC.
uu, binhex, base64, binascii, quopri
Encode et décode les données binaires (ou autres) transmises
sous la forme de texte.
Module math
Le module math exporte les outils de la librairie C standard math
afin qu’ils puissent être utilisés en Python. Le tableau 25, Exports du
module math en Python 3.3, liste les fonctions de ce module en Python
3.3, avec sept ajouts récents en 3.2 et 3.3 qui sont indiqués en gras.
Les module Python 2.7 est identique, mais il n’a pas les fonctions log2
ni isfinite. Le contenu de ce tableau peut varier légèrement d’une
version à l’autre. Toutes les entrées sont des fonctions appelables
(avec des parenthèses qui ont été omises ici), à l’exception de pi et e.
Pour des détails supplémentaires, reportez-vous à la
documentation de la librairie Python, ou importez math et exécutez
help(math.nom_fonction) pour les arguments et les commentaires
sur n’importe quel nom de fonction de ce tableau (dir(math) vous
permet de consulter le contenu du module). Consultez aussi le
module de librairie standard cmath pour les fonctions gérant les
nombres complexes, et le système tiers NumPy (ainsi que d’autres)
sur le Web pour des fonctionnalités numériques avancées.
Tableau 25 — Exports du module math en Python 3.3
Tableau 25 — (suite)
Module time
Utilitaires pour la gestion des heures et des dates : accès au temps,
mise en forme et temporisations. La liste suivante est une liste
partielle d’exports du module time. Voir aussi les sections Module
datetime, Module timeit, et la documentation de la librairie Python
pour des informations complémentaires :
time.clock()
Retourne le temps CPU ou le temps réel depuis le démarrage
du processus ou depuis le premier appel à clock(). La précision
et la sémantique dépendent de la plateforme (voir le manuel
Python). Retourne des secondes exprimées sous la forme d’un
nombre en virgule flottante. Utile pour le benchmarking et le
minutage des sections de code alternatives.
time.time()
Retourne un nombre en virgule flottante représentant le temps
UTC en secondes écoulées depuis epoch. Sous Unix, epoch est le
1er janvier 1970. Cela permet d’avoir une meilleure précision
que clock() sur certaines plateformes (voir le manuel Python).
time.ctime(secs)
Convertit une heure exprimée en secondes écoulées depuis
epoch en une chaîne représentant l’heure au format local
(par exemple, ctime(time())). L’argument est optionnel et
sa valeur par défaut est l’heure en cours s’il est omis.
time.sleep(secs)
Suspend l’exécution du processus (du thread appelant) pen-
dant secs secondes. secs peut être un nombre en virgule
flottante pour représenter des fractions de secondes.
Module timeit
Outils portables pour mesurer le temps d’exécution d’une chaîne de code
ou d’un appel de fonction. Voir le manuel Python des informations
détaillées.
Interface en ligne de commande :
Elle est utilisée par les fonctions suivantes. stmt et setup sont une
chaîne de code (utilisez ; ou \n pour séparer plusieurs instructions,
et des espaces ou \t pour l’indentation), ou un appelable sans
argument. La valeur par défaut de la fonction timer, dflt, dépend de
la plateforme et de la version.
timeit.repeat(stmt=’pass’, setup=’pass’,
timer=dflt, repeat=3, number=1000000)
Crée une instance Timer avec les paramètres stmt et setup ainsi
que la fonction timer, puis exécute sa méthode repeat avec le
compteur repeat pendant number exécutions. Retourne une liste des
résultats du minutage : on prend la fonction min() pour le meilleur
résultat au cours des repeat fois.
timeit.timeit(stmt=’pass’, setup=’pass’,
timer=dflt, number=1000000)
Crée une instance Timer avec les paramètres stmt et setup ainsi
que la fonction timer, puis exécute sa méthode timeit pendant
number exécutions. Exécute une seule fois setup ; retourne le temps
d’exécution de stmt pendant number fois.
Module datetime
Outils pour la gestion des dates : soustraction de dates, ajout de jours
à des dates, et ainsi de suite. Voir aussi la section Module time, et la
documentation de la librairie Python pour les détails.
Module random
Fonctions variées de randomisation : nombres alétoires, mélanges, et
sélections. Voir le manuel Python pour des informations détaillées.
Module json
Utilitaires pour traduire les dictionnaires Python et les structures
de listes vers/depuis du texte au format JSON, qui est un format
portable de représentation de données utilisé par les systèmes comme
MongoDB (par BSON), et SL4A d’Android (dans JSON-RPC). Voir
aussi la sérialisation native d’objets Python dans la section Module
pickle, la prise en charge de XML dans la section Outils et modules
Internet, et les autres concepts de base de données dans la section API
de base de données SQL Python.
"year": 2014,
"title": "PyRef5E",
"pub": "orm"
}
Module subprocess
Outils pour exécuter des lignes de commandes, en introduisant un
de leurs trois flux, en récupérant des codes de sortie, et en spécifiant
l’execution du shell, qui sont des alternatives à certaines fonctions
du module os comme os.popen() et os.spawnv() ; voir la section
Module système os et le manuel Python pour des détails complémen-
taires. Conseil : n’utilisez pas ces outils pour lancer des chaînes de
commandes shell dans lesquelles vous n’avez pas confiance, car elles
peuvent exécuter des commandes autorisées par le processus Python.
Dans le , script suivant m.py affiche sa ligne de commande sys.argv :
Module enum
Disponible à partir de Python 3.4, ce module fournit une prise en
charge standard des énumérations qui sont des ensemble de noms
symboliques (c’est-à-dire des membres) liés à des valeurs de constantes
uniques. Il ne faut pas confondre cela avec la fonction enumerate(),
qui est utilisée pour les résultats de l’itérateur de nombres séquentiels
(voir la section Fonctions intégrées):
>>> from enum import Enum
>>> class PyBooks(Enum):
Learning5E = 2013
Autres modules de la librairie standard 233
Programming4E = 2011
PocketRef5E = 2014
>>> print(PyBooks.PocketRef5E)
PyBooks.PocketRef5E
>>> PyBooks.PocketRef5E.name,
PyBooks.PocketRef5E.value
(’PocketRef5E’, 2014)
>>> type(PyBooks.PocketRef5E)
<enum ’PyBooks’>
>>> isinstance(PyBooks.PocketRef5E, PyBooks)
True
>>> for book in PyBooks: print(book)
...
PyBooks.Learning5E
PyBooks.Programming4E
PyBooks.PocketRef5E
Module struct
Les threads sont des processus légers qui partagent la mémoire globale
(c’est-à-dire les portées lexicales et les valeurs internes de l’interpré-
teur) et exécutent des fonctions en parallèle (en même temps) au sein
du même processus. Les modules de threads Python fonctionnent de
manière portable entre les plateformes. Ils sont conçus pour exécuter
des tâches non bloquantes dans des contextes d’entrées/sorties et
d’interface utilisateur.
API de base de données SQL Python 235
Interface du module
Les sections suivantes fournissent une liste partielle des exports ;
reportez-vous à la documentation complète de l’API disponible à
http://www.python.org pour les détails ignorés ici. Voici les principaux
outils de l’interface du module (dbmod) :
dbmod.connect(paramètres...)
Constructeur d’un objet connexion (conn) qui représente
une connexion à la base de données. Les paramètres sont
spécifiques à l’éditeur.
dbmod.paramstyle
Chaîne fournissant le type de mise en forme des marqueurs de
paramètres (par exemple, style qmark = ?).
dbmod.Warning
Exception levée pour les avertissements importants, comme la
perte de données.
dbmod.Error
Exception qui est la classe de base de toutes les autres excep-
tions indiquant des erreurs.
Objets connexion
Les objets connexion (conn) répondent aux méthodes suivantes :
conn.close()
Ferme la connexion immédiatement (plutôt que lors de l’appel
de __del__).
conn.commit()
Valide toutes les transactions en attente dans la base de
données.
conn.rollback()
Effectue un rollback de la base de données et revient au
point de départ de la transaction en attente ; la fermeture
d’une connexion sans validation préalable des modifications
provoque un rollback implicite.
238 Chapitre 1. Python précis et concis
conn.cursor()
Retourne un nouvel objet curseur (curs) pour la soumission
d’une chaîne SQL à la connexion.
Objets curseur
Les objets curseur (curs) représentent des curseurs de base de données,
qui sont utilisés pour gérer le contexte d’une opération d’accès aux
données :
curs.description
Séquence de séquences de sept éléments, chaque élément
contenant des informations qui décrivent une colonne de résul-
tat : (nom, type_de_code, taille_affichage, taille_interne,
précision, échelle, null_ok).
curs.rowcount
Spécifie le nombre de lignes produites par la dernière variante
execute* (pour les instructions DQL comme select) ou le
nombre de lignes modifiées (pour les instructions DML comme
update ou insert).
curs.callproc(nom_procédure [, paramètres])
Appelle une procédure stockée dont le nom est passé en
paramètre. La séquences des paramètres doit contenir une
entrée pour chaque argument attendu par la procédure ; le
résultat est retourné sous la forme d’une copie modifiée des
entrées.
curs.close()
Ferme le curseur immédiatement (plutôt que lors de l’appel de
__del__).
curs.execute(opération [, paramètres])
Prépare et exécute une opération de base de données (requête
ou commande) ; les paramètres peuvent être spécifiés sous la
forme d’une liste de tuples pour insérer plusieurs lignes en
une seule opération (mais il est préférable d’utiliser execute-
many()).
curs.executemany(opération, séquence_de_paramètres)
Prépare une opération de base de données (requête ou com-
mande) et l’exécute avec tous les paramètres de la séquence
ou des mappings de la séquence séquence_de_paramètres.
Équivalent à plusieurs appels de execute().
Conseils supplémentaires 239
curs.fetchone()
Récupère la ligne suivante d’un ensemble de lignes résultant
d’une requête, en retournant une seule séquence, ou None
quand il n’y a plus de données disponibles. Utile pour les grands
ensembles de données ou si la base de données est lente.
curs.fetchmany([size=curs.arraysize])
Récupère l’ensemble suivant de lignes d’un résultat de requête,
en retournant une séquence de séquences (par exemple, une
liste de tuples). Une séquence vide est retournée quand il n’y
a plus de données disponibles.
curs.fetchall()
Récupère toutes les lignes (ou toutes celles qui restent) d’un
résultat de requête, en les retournant sous la forme d’une
séquence de séquences (par exemple, une liste de tuples).
CONSEILS SUPPLÉMENTAIRES
Conseils d’utilisation
• Utilisez from __future__ import nom_de_fonctionnalité pour
activer les modifications en attente du langage qui pourraient
faire planter le code existant, mais activez la compatibilité de
version.
• Les intuitions concernant les performances des programmes en
Python sont en général fausses : faites toujours des tests avant
d’optimiser ou de migrer en C. Utilisez les modules profile,
time et timeit (ainsi que cProfile).
• Consultez les modules unittest (appelé aussi PyUnit) et doc-
test les outils de tests automatisés livrés avec la librairie
Python standard ; unittest est un framework sophistiqué ;
doctest analyse les chaînes de documentation pour des tests et
des résultats afin d’exécuter à nouveau des sessions interactives.
Conseils supplémentaires 243
Conseils divers
• Sites Web auxquels il est intéressant de se référer :
– http://www.python.org (le site officiel de Python)
– http://www.python.org/pypi (outils Python
supplémentaires)
– http://learning-python.com/books (le site de l’auteur de cet
ouvrage)
• Philosophie Python : import this.
• Vous devez écrire spam et eggs au lieu de foo et bar dans les
exemples Python.
• Voyez toujours le bon côté des choses.
Index
conn.commit 237 D
conn.cursor 238 -d, option Python 4
ConnectionAbortedError, date 230
exception 171
datetime, module 230
ConnectionError, exception 170 dbm, module 212
ConnectionRefusedError, dbmod.connect 237
exception 171 dbmod.Error 237
ConnectionResetError, dbmod.paramstyle 237
exception 171 dbmod.Warning 237
connexion, objet de base de D.clear 57
données 237
D.copy 57
conn.rollback 237 décorateur 88, 99
constantes de portabilité 188 def, instruction 84
__contains__ 18, 127 définition
__contains__ 18 format des arguments 85
contexte __del__ 122
gestionnaire 106 del, instruction 84
protocole de gestionnaire __delattr__ 124
107 delattr, fonction 140
continue, instruction 84 __delete__ 133
contrôle de flux 69 __delitem__ 19, 129
conversion de types 67 __delslice__ 136
courrier électronique 226 __delslice__ 18
mapping 55 motif
méthodes 127 expression régulière 207
opérations 56 séquences spéciales 212
match, objet du module re 208 syntaxe 210
math, module 227 __mro__ 175
max, fonction 146 MRO 116, 117
MemoryError, exception 167 __mul__ 18, 20, 129
memoryview, fonction 146, 159 mutable 48, 55, 65
__metaclass_ 137
métaclasse 100
méthode N
binaire 129
__name__ 175
binaire augmentée 131
NameError, exception 167
surchargement d’opérateur
120 __ne__ 125
surchargement des noms __neg__ 20, 132
121 __new__ 121
min, fonction 146 __next__ 52, 128, 134
mobj, objet match 208 next, fonction 146
mobj.endpos 208 nom
mobj.expand 209 format 71
mobj.group 208 non qualifié 109
mobj.groupdict 208 qualifié 108
mobj.groups 208 nombre 22
mobj.pos 208 méthodes 129, 132
mobj.re 208 nommage 71
mobj.span 209 conventions 72
mobj.start 208 None 67
mobj.string 208 nonlocal, instruction 92
__mod__ 20, 130 __nonzero__ 135
modèle de programmation 1 NotADirectoryError, exception
module 93, 175 171
attributs privés 113 NotImplemented 67
import 96 NotImplementedError,
mot réservé 71, 72 exception 167
Index 253
O os.defpath 189
os.devnull 189
-O, option Python 5
os.dup 193
object, fonction 147
os.dup2 193
objet
os.environ 191
persistance 212
os.error 188
programmation 112
OSError, exception 165, 174
__oct__ 136
os.execl 199
oct, fonction 147
os.execle 199
-OO, option Python 5
os.execlp 199
open, fonction 60, 147, 163
os.execv 200
opérateur
os.execve 200
binaire 129
os.execvp 200
booléen 16, 17 os.execvpe 200
de comparaison 17 os._exit 200
dictionnaire 19 os.extsep 189
mapping 19 os.fdopen 193
numérique 20 os.fork 200
priorité 14 os.fstat 194
surchargement 120 os.ftruncate 194
type séquence 18, 20 os.getcwd 192
type séquence mutable 19 os.getenv 192
utilisation 13 os.geteuid 200
opérateurs os.getpid 200
catégories 16 os.getppid 200
or 17 os.getuid 200
__or__ 20, 130 os.isatty 194
ord, fonction 151 os.kill 201
os, module 186 os.linesep 189
os.abort 199 os.link 195
os.access 198 os.listdir 196
os.altsep 189 os.lseek 194
os.chdir 192, 195 os.lstat 196
os.chmod 195 os.makedirs 197
os.chown 195 os.mkdir 196
os.close 193 os.mkfifo 196, 201
os.curdir 189 os.name 188
254 Python