Dunod Programmation Python Avancee 2ed
Dunod Programmation Python Avancee 2ed
PYTHON
AVANCÉE
Chez le même éditeur
Python 3
2e édition
Bob Cordeau, Laurent Pointal
304 pages
Dunod, 2025
© Dunod, 2025
11 rue Paul Bert, 92240 Malakoff
[Link]
ISBN 978-2-10-088187-1
Préface à la première édition
V
Lorsque Xavier Olive m’a contacté pour me proposer de relire ce livre que vous tenez ac-
tuellement entre les mains, ma première réaction a été « Oh non, encore un livre sur Python ! »
Un certain nombre de livres sur Python trônent déjà sur les étagères de mon bureau, même
s’il est vrai que la plupart sont en anglais. Mais lors de ce premier échange par mail, Xavier
a glissé subrepticement le fait qu’il avait pour but d’écrire le livre qu’il aurait voulu lire. Cela
a eu pour effet immédiat d’attiser ma curiosité et j’ai donc accepté de relire cet ouvrage sans
trop savoir où je mettais les pieds. Après avoir relu les quelque 350 pages qui composent ce
livre, je réalise que c’était une très bonne décision de ma part tant le livre est agréable à lire,
tant sur la forme que sur le fond.
Sur la forme d’abord, car Xavier a véritablement soigné le style du livre qui tranche avec
un certain nombre d’ouvrages que j’ai pu lire par le passé. Ayant une solide expérience quant
à la typographie et à la mise en page, je suis admiratif du soin et du souci du détail qui ont
été apportés à l’ouvrage. Trop souvent les auteurs négligent cet aspect en se disant que seul le
fond importe pour un ouvrage technique alors que la forme peut véritablement jouer un rôle
essentiel pour la compréhension de concepts parfois ardus. La relecture et les échanges avec
Xavier sur ces aspects ont été d’autant plus agréables qu’il en a une parfaite maîtrise.
Mais la prouesse du livre se trouve bien évidemment sur le fond. Ayant moi-même une as-
sez grande expérience de Python, notamment sur ses versants scientifiques, je reste admiratif
de cet ouvrage qui est à la fois bien écrit, bien structuré, bien documenté et surtout extrême-
ment pédagogique dans son approche. Lors de ma relecture du premier chapitre, je me suis
d’abord fait la réflexion qu’il allait un peu vite en besogne en présentant les bases du langage
Python, avant de me rappeler qu’il s’agissait d’un ouvrage avancé venant compléter celui de
Bob Cordeau et Laurent Pointal qui s’adresse, lui, aux débutants. Or, présenter les bases du
langage Python à des utilisateurs avancés est un vrai numéro d’équilibriste. Mais je crois que
Xavier a su justement trouver le bon équilibre en choisissant méticuleusement les aspects
peut-être moins connus du langage et en les illustrant à l’aide d’exemples pertinents (et pour
certains passionnants au niveau théorique, comme les L-systèmes).
Le livre est structuré autour de cinq grandes parties (Les bases du langage Python, L’éco-
système Python, Écrire un Python naturel et efficace, Python, couteau suisse du quotidien,
Développer un projet en Python) et de trois interludes (Calcul du rayon de la Terre, Recons-
truire une carte d’Europe, La démodulation de signaux FM) qui viennent agréablement aérer
la technicité de certains chapitres. Étant avant tout un livre pour des utilisateurs avancés, il est
V
Préface à la première édition
évident que Xavier ne pouvait éviter d’être technique sur certains des aspects les plus avancés
de Python. J’avoue ne pas être un grand fan des dernières possibilités offertes par le langage
Python car je crois que cela alourdit inutilement le langage mais Xavier a su malgré tout me
convaincre de l’utilité de la majorité d’entre elles, notamment lorsque l’on se retrouve à gérer
de gros projets collaboratifs.
Je suis donc à la fois très honoré et très heureux d’écrire aujourd’hui cette préface pour
un livre qui, je le crois, deviendra un classique. Évidemment, ce n’est que la première édition
et, au vu de la rapidité d’évolution du langage Python, je crois aussi que Xavier s’est engagé,
sans peut-être le savoir, à écrire une nouvelle édition tous les deux ou trois ans. C’est tout
le mal que je lui souhaite. D’ailleurs, à l’heure où j’écris ces lignes (février 2021), le PEP 636
concernant l’identification structurelle de motifs (Structural Pattern Matching en anglais) vient
d’être accepté, validant ainsi encore un peu plus la 10ᵉ règle de Greenspun ¹.
Nicolas P. Rougier
Docteur en informatique et chercheur
à l’Inria en neurosciences computationnelles
Février 2021
1. [Link]
VI
Z
Table des matières
Préface à la première édition V
Avant-propos IX
II L’écosystème Python 67
5 Le calcul numérique avec NumPy 69
6 Produire des graphiques avec Matplotlib 83
7 La boîte à outils scientifiques SciPy 99
8 L’environnement interactif Jupyter 107
Interlude : Reconstruire une carte d’Europe 113
VII
Table des matières
VIII
Avant-propos
]
Python est un langage généraliste et multi-plateforme, développé suivant un modèle open
source depuis le début des années 1990 : sa première version vient de fêter ses 30 ans ! C’est
un langage interprété, populaire pour sa facilité d’utilisation, pour sa polyvalence, et pour
les apports de sa communauté. Python est apprécié parmi les scientifiques et les ingénieurs
d’horizons divers.
Dans certaines spécialités, d’autres langages peuvent être plus rapides, plus sûrs ou plus
complets, mais Python se démarque par sa polyvalence, par la concision et la lisibilité de sa
syntaxe, par la facilité avec laquelle on peut écrire un prototype en quelques heures, construire
une chaîne de traitements à partir de briques logicielles écrites par d’autres, parfois dans
d’autres langages. Enfin, il reste une solution de choix pour outiller des tâches informatiques
simples de notre quotidien.
IX
Avant-propos
$ uv pip install .
X
Avant-propos
Les exemples courts démarrent par >>> pour refléter l’invite de l’interpréteur Python. Les
retours sont alors affichés à la ligne.
>>> import math
>>> [Link]
3.141592653589793
...
Tout fichier ou toute partie d’un fichier Python est imprimé dans le livre et annoté à l’aide
de balises numérotées À, Á, etc. Les fichiers complets sont disponibles sur le site https://
[Link]/python/. Tous les exemples ont été testés pour Python 3.12.
La première partie du livre sur les bases du langage ne nécessite pas de bibliothèques
particulières : n’importe quel interpréteur Python fera l’affaire.
Dans les parties suivantes, il est recommandé de cloner le dépôt du livre depuis le lien
[Link] À, d’installer l’outil pixi (☞ p. 348, § 24.6), puis de créer
un environnement dédié. Lors de la première exécution de la commande pixi Á, l’environne-
ment Python et ses dépendances seront installées.
$ git clone [Link] # À
$ pixi run python # Á
Python 3.12.5 | packaged by conda-forge | (main, Aug 8 2024, [Link]) [Clang 16.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
— le texte à chasse fixe retranscrit notamment des noms de variables, de modules et des
scripts Python.
9 Attention !
Cet encart met en valeur les erreurs et pièges courants dans lesquels le programmeur,
même averti, peut tomber.
V Bonnes pratiques
Cet encart met en valeur les bonnes pratiques, couramment admises, qui améliorent la
qualité et la lisibilité du code.
XI
Avant-propos
Cas d’application. Cet encart met en valeur un exemple appliqué au milieu d’un cha-
pitre théorique.
En quelques mots…
Cet encart conclut un chapitre en rappelant les éléments essentiels à retenir pour com-
prendre les chapitres suivants.
Remerciements
Ce projet n’aurait pas vu le jour si Bob Cordeau ne m’avait pas présenté Jean-Luc Blanc
des éditions Dunod, juste après la soumission du manuscrit de la deuxième édition de son
ouvrage Python 3. Apprendre à programmer dans l’écosystème Python. Je tiens à les remercier
tous les deux, notamment M. Blanc pour la confiance qu’il m’a accordée pour la définition de
ce nouveau projet et pour la souplesse avec laquelle il m’a accompagné.
La rédaction d’un tel ouvrage est un moment intense, un marathon dans lequel sont em-
barqués malgré eux épouse, enfants, proches et collègues. Tous ont participé d’une manière
ou d’une autre à ce travail, en faisant face à une indisponibilité qu’ils n’avaient pas choisie, en
apportant leur soutien, leur point de vue critique après relectures, leur réponse pendant les
moments de doute et leurs encouragements. Cet ouvrage leur est dédié.
Je remercie notamment Luis Basora et Thomas Dubot, fidèles soutiens et relecteurs de la
première heure, ainsi que Judicaël Bedouet pour sa gentillesse et ses métacommentaires avisés.
Junzi Sun et Enrico Spinielli ont également contribué à cet ouvrage sans vraiment le savoir, le
fruit de nos riches échanges transparaît dans de nombreux exemples.
Nicolas Rougier, auteur de nombreuses références Python de qualité, a répondu à mon
invitation, a accepté de relire l’intégralité de l’ouvrage puis m’a fait l’honneur de le préfacer.
Brice Martin, des éditions Dunod, a également été d’une grande aide pour la préparation du
manuscrit. Leurs commentaires ont contribué à améliorer la lisibilité de l’ensemble.
Il faut enfin saluer tous les étudiants qui, par leurs progrès, leurs doutes, leurs interroga-
tions et reformulations, ont contribué à améliorer les ressources pédagogiques préliminaires
sur lesquelles sont construites les fondations de ce livre.
XII
Introduction à la deuxième édition
W
L’
apprentissage d’un langage de programmation est un processus progressif. Comme
pour une langue vivante, il est tout à fait possible, et même recommandé, de pratiquer
un langage même sans en connaître toutes les subtilités. C’est par la pratique qu’on
découvre de nouvelles problématiques, des solutions pour y répondre ; puis vient la réflexion
pour généraliser ces solutions à des classes générales de problèmes. Un langage vivant est
capable de faire vivre de telles réflexions pour proposer des améliorations de celui-ci.
Ce rôle est joué en Python par les PEP, les Python Enhancement Proposals, ces discussions
levées par la communauté avec des propositions d’améliorations du langage. Certaines amé-
liorations sont controversées, mais les décisions sont toujours prises après échanges d’argu-
ments. Ces améliorations font évoluer le langage et les pratiques mois après mois. Le Python
de 1989 n’est pas le même que le Python de 2003, qui n’est pas le même que le Python de 2020.
Ces pages ont pour vocation d’explorer cet environnement changeant du langage, de son
écosystème, construit autour des structures de données efficaces de la bibliothèque NumPy
(☞ p. 69, § 5) et des technologies du web vers lesquelles la communauté se tourne progressi-
vement ( ☞ p. 107, § 8 ; ☞ p. 137, § 10), ainsi que des fondements théoriques sur lesquels il s’est
construit. Elles guident le lecteur dans le monde des bibliothèques tierces de référence conçues
pour faciliter la réalisation de tâches élémentaires : télécharger des données (☞ p. 309, § 21),
extraire des informations d’un document (☞ p. 299, § 20), les structurer, les transformer ou
les visualiser, le tout dans l’objectif d’y apporter une valeur ajoutée.
Le livre se termine sur la conception d’un projet Python (☞ p. 349, § 25). Les outils évoluent
de jour en jour, il n’a jamais été aussi facile qu’en 2020 de partager du code tout en s’assurant
qu’il pourra être exécuté sur une nouvelle plateforme, sur un nouveau système d’exploitation,
en embarquant les bibliothèques nécessaires à son bon fonctionnement.
La première version de cet ouvrage était basée sur Python 3.9, qui avait déjà vu l’introduc-
tion de plusieurs innovations majeures :
— les mots-clés pour la programmation asynchrone,
— l’opérateur de multiplication matricielle,
— les annotations de types (PEP 526),
— les chaînes de caractères formatées, ou f-strings, (PEP 498, ☞ p. 9, § 1.3)),
— le séparateur de milliers avec le souligné dans les entiers,
— les dataclasses (PEP 557 , ☞ p. 50, § 4.2),
1
Introduction à la deuxième édition
— le walrus operator := du PEP 572 au terme duquel le créateur du langage Guido van
Rossum a quitté son poste de Benevolent Dictator For Life (BDFL) ;
— les types standards génériques (PEP 585, ☞ p. 367, § 27).
Cet ouvrage doit évoluer avec l’écosystème Python. Le manuscrit de cette nouvelle édition
a été finalisé juste avant la sortie de Python 3.13. Les principaux ajouts de cette deuxième
édition incluent :
— La mise à jour vers NumPy 2.0 (☞ p. 80, § 5.7) ;
— La mise à jour vers Pandas 2.0 (☞ p. 133, § 9.6), ainsi qu’un aperçu sur la bibliothèque
Polars (☞ p. 133, § 9.7) ;
— Une présentation de la bibliothèque Xarray (☞ p. 155, § 11) ;
— Le structural pattern matching (☞ p. 166, § 12.1), un principe qui vient de la program-
mation fonctionnelle (☞ p. 165, § 12).
— Les nouveautés concernant la gestion de la concurrence (☞ p. 269, § 18).
— Un chapitre dédié à la programmation asynchrone (☞ p. 279, § 19), et l’introduction de
nouvelles bibliothèques Python adaptées à ce paradigme :
— Requests est remplacé par HTTPX (☞ p. 309, § 21.1) ;
— Flask est remplacé par FastAPI (☞ p. 312, § 21.2) ;
— la gestion des bases de données (y compris DuckDB ☞ p. 317, § 21.3.1) est présentée
avec SQLAlchemy (☞ p. 317, § 21.3.2) ;
— Dans le terminal on présente désormais les bibliothèques Rich (☞ p. 321, § 22.1) et
Textual (☞ p. 325, § 22.3).
— La possibilité d’exécuter Python directement dans un navigateur web (☞ p. 333, § 23) ;
— La gestion d’un projet Python mise à jour avec les outils Ruff (☞ p. 349, § 25) et uv
(☞ p. 345, § 24.4) ;
— Les dernières évolutions de la syntaxe de typage statique (☞ p. 367, § 27) ;
— L’intégration de Rust dans le développement Python (☞ p. 389, § 28.3) ;
— Quelques remarques sur les bonnes pratiques de code en fin d’ouvrage.
Python reste un outil, pas une fin en soi. Comme le dit A. Maslow, I suppose it is tempting,
if the only tool you have is a hammer, to treat everything as if it were a nail, « J’imagine qu’il
est tentant, si le seul outil dont vous disposez est un marteau, de tout considérer comme un
clou. »
Ces lignes visitent parfois des contrées atypiques, des manières de programmer qui peuvent
sembler déroutantes. L’objectif de cet ouvrage est d’apporter des éléments qui permettent de
clarifier des éléments de syntaxe et de conception couramment utilisés dans des grosses bases
logicielles. Attention cependant par la suite à bien distinguer « bonne pratique » d’« usage
inutilement complexe ».
Keep it simple.
2
I
Les bases du
langage Python
1
Types et arithmétique de base
L’
objectif de ce chapitre est de redécouvrir les types de base de Python : nombres
(entiers, flottants, complexes), chaînes de caractères, structures conteneurs (tuples,
listes, ensembles, dictionnaires), fonctions et exceptions. Nous nous concentrons ici
sur les particularités du langage et les singularités de chacune des structures présentées. La
documentation officielle ¹ reste la référence pour une description exhaustive des possibilités
des structures conteneurs de base.