Python 3
Apprendre à programmer dans l'écosystème Python
Bob Cordeau
Laurent Pointai
Gérard Swinnen
Dunod
Préface
v
Avant-propos
xiii
1 Programmer en Python1
1.1 Mais pourquoi donc apprendre à programmer ?1
1.1.1 Un exemple pratique2
1.1.2 Et après ?5
1.2 Mais pourquoi donc apprendre Python ?6
1.2.1 Principales caractéristiques du langage Python6
1.2.2 Implémentations de Python7
1.3 Comment passer du problème au programme8
1.3.1 Réutiliser8
1.3.2 Réfléchir à un algorithme8
1.3.3 Résoudre « à la main »9
1.3.4 Formaliser9
1.3.5 Factoriser9
1.3.6 Passer de l'idée au programme10
1.4 Techniques de production des programmes10
1.4.1 Technique de production de Python11
1.4.2 Construction des programmes11
1.5 Résumé et thèmes de réflexion12
2 La calculatrice Python13
2.1 Modes d'exécution d'un code Python13
2.2 Identificateurs et mots-clés14
2.2.1 Identificateurs14
2.2.2 Mots-clés de Python 314
2.2.3 PEP 8 : une affaire de style14
2.2.4 Nommage des identificateurs15
2.3 Notion d'expression15
2.4 Variable et objet16
2.4.1 Affectation16
2.4.2 Réaffectation et typage dynamique17
2.4.3 Attention : affecter n'est pas comparer !18
2.4.4 Variantes de l'affectation18
2.4.5 Suppression d'une variable19
2.4.6 Énumérations19
2.5 Types de données entiers21
2.5.1 Type int21
2.5.2 Type bool22
2.6 Types de données flottants23
2.6.1 Type float24
2.6.2 Type complex24
2.7 Chaînes de caractères25
2.7.1 Présentation25
2.7.2 Séquences d'échappement25
2.7.3 Opérations26
2.7.4 Fonctions vs méthodes26
2.7.5 Méthodes de test de l'état d'une chaîne27
2.7.6 Méthodes retournant une nouvelle chaîne27
2.7.7 Méthode retournant un index27
2.7.8 Indexation simple28
2.7.9 Slicing28
2.7.10 Formatage de chaînes29
2.8 Types binaires34
2.9 Entrées-sorties de base35
2.10 Comment trouver une documentation36
2.11 Résumé et exercices37
3 Contrôle du flux d'instructions39
3.1 Indentation significative et instructions composées39
3.2 Choisir40
3.2.1 Choisir : if - [elif] - [else]40
3.2.2 Syntaxe compacte d'une alternative41
3.3 Boucles41
3.3.1 Parcourir : for42
3.3.2 Répéter sous condition : while42
3.4 Ruptures de séquences43
3.4.1 Interrompre une boucle : break43
3.4.2 Court-circuiter une boucle : continue43
3.4.3 Traitement des erreurs : les exceptions44
3.5 Résumé et exercices45
4 Conteneurs standard49
4.1 Séquences49
4.2 Listes50
4.2.1 Définition, syntaxe et exemples50
4.2.2 Initialisations, longueur de la liste et tests d'appartenance51
4.2.3 Méthodes modificatrices51
4.2.4 Manipulation des index et des slices52
4.3 Tuples52
4.4 Séquences de séquences53
4.5 Retour sur les références53
4.5.1 Les références partagées des objets immutables54
4.5.2 Les références partagées des objets mutables54
4.5.3 L'affectation augmentée55
4.6 Tables de hash57
4.7 Dictionnaires59
4.8 Ensembles60
4.9 Itérer sur les conteneurs62
4.10 Résumé et exercices63
5 Fonctions et espaces de nommage65
5.1 Définition et syntaxe65
5.2 Passage des arguments67
5.2.1 Mécanisme général67
5.2.2 Un ou plusieurs paramètres positionnels, pas de retour67
5.2.3 Un ou plusieurs paramètres positionnels, un ou plusieurs retours68
5.2.4 Appel avec des arguments nommés69
5.2.5 Paramètres avec valeur par défaut70
5.2.6 Nombre d'arguments arbitraire : passage d'un tuple de valeurs70
5.2.7 Nombre d'arguments arbitraire : passage d'un dictionnaire71
5.2.8 Argument mutable71
5.3 Espaces de nommage72
5.3.1 Portée des objets73
5.3.2 Résolution des noms : règle « LEGB »73
5.4 Résumé et exercices74
6 Modules et packages77
6.1 Modules77
6.1.1 Imports78
6.1.2 Localisation des fichiers modules79
6.1.3 Emplois et chargements des modules80
6.2 Packages85
6.3 Résumé et exercices87
7 Accès aux données89
7.1 Fichiers89
7.1.1 Gestion des fichiers90
7.1.2 Ouverture et fermeture des fichiers en mode texte91
7.1.3 Écriture séquentielle91
7.1.4 Lecture séquentielle92
7.1.5 Gestionnaire de contexte with92
7.1.6 Fichiers binaires93
7.2 Travailler avec des fichiers et des répertoires93
7.2.1 Se positionner dans l'arborescence93
7.2.2 Construction de noms de chemins94
7.2.3 Opérations sur les noms de chemins94
7.2.4 Gestion des répertoires94
7.3 Sérialisation avec pickle et j son95
7.4 Bases de données relationnelles96
7.4.1 Comprendre le langage SQL96
7.4.2 Utiliser SQL en Python avec sqlite397
7.5 Micro-serveur web106
7.5.1 Internet106
7.5.2 Web108
7.5.3 Un serveur web en Python108
7.6 Résumé et exercices113
8 Programmation orientée objet115
8.1 Origine et évolution115
8.2 Terminologie116
8.3 Définition des classes et des instanciations d'objets117
8.3.1 Instruction class117
8.3.2 L'instanciation et ses attributs, le constructeur118
8.3.3 Retour sur les espaces de noms120
8.4 Méthodes121
8.5 Méthodes spéciales122
8.5.1 Surcharge des opérateurs123
8.5.2 Exemple de surcharge123
8.6 Héritage et polymorphisme124
8.6.1 Formalisme de l'héritage et du polymorphisme124
8.6.2 Exemple d'héritage et de polymorphisme126
8.7 Notion de « conception orientée objet »127
8.7.1 Relation, association127
8.7.2 Dérivation128
8.8 Résumé et exercices129
9 La programmation graphique orientée objet131
9.1 Programmes pilotés par des événements131
9.2 Bibliothèque tkinter131
9.2.1 Présentation131
9.2.2 Les widgets de tkinter133
9.2.3 Positionnement des widgets133
9.3 Deux exemples134
9.3.1 Une calculette134
9.3.2 tkPhone134
9.4 Résumé et exercices141
10 Programmation avancée143
10.1 Techniques procédurales143
10.1.1 Pouvoir de l'introspection143
10.1.2 Utiliser un dictionnaire pour déclencher des fonctions ou des méthodes145
10.1.3 Listes, dictionnaires et ensembles définis en compréhension146
10.1.4 Générateurs et expressions génératrices148
10.1.5 Décorateurs149
10.2 Techniques objets151
10.2.1 Functors151
10.2.2 Accesseurs152
10.2.3 Duck typing155
10.2.4 Duck typing... et annotations de types157
10.3 Algorithmique158
10.3.1 Directive lambda158
10.3.2 Fonctions incluses et fermetures159
10.3.3 Techniques fonctionnelle : fonctions map, filter et reduce160
10.3.4 Programmation fonctionnelle pure162
10.3.5 Applications partielles de fonctions163
10.3.6 Constructions algorithmiques de base164
10.3.7 Fonctions récursives172
10.4 Résumé et exercices175
11 L'écosystème Python177
11.1 Batteries included177
11.1.1 Gestion des chaînes177
11.1.2 Gestion de la ligne de commande178
11.1.3 Gestion du temps et des dates179
11.1.4 Algorithmes et types de données collection179
11.2 L'écosystème Python scientifique180
11.2.1 Bibliothèques mathématiques et types numériques181
11.2.2 IPython, l'interpréteur scientifique182
11.2.3 Bibliothèques NumPy, Pandas, matplotlib et scikit-image184
11.3 Bibliothèques tierces197
11.4 Documentation et tests197
11.4.1 Documentation197
11.4.2 Tests198
11.5 Microcontrôleurs et objets connectés200
11.6 Résumé et exercices201
12 Solutions des exercices203
Annexes
A Interlude
221
B Le codage des nombres et des caractères
223
C Les expressions régulières
229
D Les messages d'erreur de l'interpréteur
237
E Résumé de la syntaxe
255
Bibliographie
265
Glossaire et lexique anglais/français
267
Index
281