Apprenez à programmer en Python
4e édition
Vincent Le Goff
Éditions Eyrolles
I Introduction à Python1
1 Qu'est-ce que Python?
3
Un langage de programmation ? Qu'est-ce que c'est ?4
La communication humaine4
Mon ordinateur communique aussi !4
Pour la petite histoire5
À quoi peut servir Python ?6
Un langage de programmation interprété6
Différentes versions de Python7
Installer Python8
Sous Windows8
Sous Linux9
Sous macOS9
Lancer Python9
2 Premiers pas avec l'interpréteur de commandes Python
13
Où est-ce qu'on est, là ?14
Vos premières instructions : un peu de calcul mental pour l'ordinateur15
Saisir un nombre15
Opérations courantes16
3 Le monde merveilleux des variables
19
Qu'est-ce qu'une variable ? Et à quoi cela sert-il ?20
Qu'est-ce qu'une variable ?20
Comment cela fonctionne-t-il ?20
Les types de données en Python23
Qu'entend-on par « type de donnée » ?23
Les différents types de données23
Les chaînes de caractères formatées25
Un petit bonus26
Quelques trucs et astuces pour vous faciliter la vie26
Première utilisation des fonctions27
Utiliser une fonction27
La fonction « type »28
La fonction print29
4 Les structures conditionnelles
31
Vos premières conditions et blocs d'instructions32
Forme minimale en i f32
Forme complète (if, elif et else)33
De nouveaux opérateurs37
Les opérateurs de comparaison37
Prédicats et booléens37
Les mots-clés and, or et not38
Votre premier programme !40
Avant de commencer40
Sujet40
Solution ou résolution40
Correction42
5 Les boucles
45
En quoi cela consiste-t-il ?46
La boucle while47
La boucle for49
Un petit bonus : les mots-clés break et continue52
Le mot-clé break52
Le mot-clé continue52
6 Pas à pas vers la modularité (1/2)
55
Les fonctions : à vous de jouer56
La création de fonctions56
Valeurs par défaut des paramètres58
Signature d'une fonction59
L'instruction return60
Les annotations de type61
Les fonctions lambda64
Syntaxe64
Utilisation65
À la découverte des modules65
Les modules, qu'est-ce que c'est ?65
La méthode import65
Utiliser un espace de noms spécifique67
Une autre méthode d'importation : from ... import ...68
Bilan69
7 Pas à pas vers la modularité (2/2)
71
Mettre notre code en boîte72
Fini, l'interpréteur ?72
Emprisonnons notre programme dans un fichier72
Sous Linux73
Sous Windows73
Je viens pour conquérir le monde... et créer mes propres modules75
Mes modules à moi75
Faire un test dans le module-même77
Les packages79
En théorie79
En pratique79
8 Les exceptions
83
À quoi cela sert-il ?84
Forme minimale du bloc try85
Forme plus complète85
Exécuter le bloc except pour un type d'exception précis86
Les mots-clés else et finaLLy87
Un petit bonus : le mot-clé pass88
Les assertions89
Lever une exception91
9 TP : tous au ZCasino
93
Notre sujet94
Notre règle du jeu94
Organisons notre projet94
Le module random95
Arrondir un nombre95
À vous de jouer95
Correction !95
Et maintenant ?98
II La programmation orientée objet côté utilisateur99
10 Notre premier objet : la chaîne de caractères
101
Vous avez dit objet ?102
Les méthodes de la classe str102
Mettre en forme une chaîne104
Formater et afficher une chaîne106
Parcours et sélection de chaînes111
Parcours par indice111
Sélection de chaînes113
11 Les listes et tuples (1/2)
115
Créons et éditons nos premières listes116
D'abord, qu'est-ce qu'une liste ?116
Création de listes116
Insérer des objets dans une liste117
Suppression d'éléments d'une liste119
Le parcours de listes121
La fonction enumerate121
Les listes et annotations de type124
Les tuples124
Affectation multiple125
Une fonction renvoyant plusieurs valeurs125
12 Les listes et tuples (2/2)
127
Entre chaînes et listes128
Des chaînes aux listes128
Des listes aux chaînes128
Une application pratique129
Les listes et paramètres de fonctions130
Les fonctions dont on ne connaît pas à l'avance le nombre de paramètres130
Transformer une liste en paramètres de fonction133
Match et les listes133
Les compréhensions de liste137
Parcours simple137
Filtrage avec un branchement conditionnel137
Mélangeons un peu tout cela138
Nouvelle application concrète138
13 Les dictionnaires
141
Création et édition de dictionnaires142
Créer un dictionnaire142
Supprimer des clés d'un dictionnaire145
Ordre des dictionnaires145
Un peu plus loin146
Les méthodes de parcours147
Parcours des clés147
Parcours des valeurs148
Parcours des clés et valeurs simultanément148
Les dictionnaires et paramètres de fonction149
Récupérer les paramètres nommés dans un dictionnaire149
Transformer un dictionnaire en paramètres nommés d'une fonction150
Les compréhensions de dictionnaire151
Match et les dictionnaires152
14 Les ensembles
155
Utilité et création des ensembles156
Opérations sur les ensembles157
Opérations sur un ensemble157
Travail sur deux ensembles160
Quelques exemples d'utilisation162
15 Les fichiers
165
Avant de commencer166
Tout d'abord, pourquoi lire ou écrire dans des fichiers ?166
Changer le répertoire de travail courant166
Chemins relatifs et absolus167
Lecture et écriture dans un fichier168
Ouverture du fichier168
Fermer le fichier170
Lire l'intégralité du fichier170
Écriture dans un fichier171
Écrire d'autres types de données171
Le mot-clé with171
Le module pathlib172
Enregistrer des objets dans des fichiers173
Enregistrer un objet dans un fichier173
Récupérer nos objets enregistrés174
16 Portée des variables et références
177
La portée des variables178
Dans nos fonctions, quelles sont les variables accessibles ?178
La portée de nos variables179
Les variables globales183
Le principe des variables globales183
Utiliser concrètement les variables globales183
17 TP : un bon vieux pendu
185
Votre mission186
Un jeu du pendu186
Le côté technique du problème186
Gérer les scores186
À vous de jouer187
Correction proposée187
données.py187
fonctions.py188
pendu.py191
En résumé192
III La programmation orientée objet côté développeur193
18 Première approche des classes
195
Les classes, tout un monde196
Pourquoi utiliser des objets ?196
Choix du modèle196
Convention de nommage197
Nos premiers attributs197
Quand on crée notre objet199
Étoffons un peu notre constructeur199
Attributs de classe201
Les méthodes, la recette202
Le paramètre self204
Un peu d'introspection206
La fonction dir206
L'attribut spécial__dict__207
19 Les propriétés
209
Qu'est-ce que l'encapsulation ?210
Les propriétés à la casserole211
Les propriétés en action211
Une propriété en lecture seule211
Une propriété en lecture et écriture215
Les attributs privés et les propriétés218
20 Les méthodes spéciales
221
Édition de l'objet et accès aux attributs222
Édition de l'objet222
Représentation de l'objet223
Accès aux attributs de notre objet225
Les méthodes de conteneur227
Accès aux éléments d'un conteneur228
La méthode spéciale derrière le mot-clé in229
Connaître la taille d'un conteneur229
Les méthodes mathématiques229
Ce qu'il faut savoir229
Tout dépend du sens232
D'autres opérateurs234
Les méthodes de comparaison235
Des méthodes spéciales utiles à pickle236
La méthode spéciale __getstate__236
La méthode setstate237
On peut enregistrer dans un fichier autre chose que des dictionnaires238
Je veux encore plus puissant !239
21 Parenthèse sur le tri en Python
241
Première approche du tri242
Deux méthodes242
Aperçu des critères de tri243
Trier avec des clés précises243
L'argument key244
Trier une liste d'objets246
Trier dans l'ordre inverse248
Plus rapide et plus efficace248
Les fonctions du module operator248
Trier selon plusieurs critères249
22 L'héritage
???
Pour bien commencer???
L'héritage simple???
Petite précision258
Appel d'une méthode parente avec super ()258
Deux fonctions très pratiques260
L'héritage multiple260
Recherche des méthodes261
Retour sur les exceptions261
Création d'exceptions personnalisées262
23 Derrière la boucle for
265
Les itérateurs266
Utiliser les itérateurs266
Créons nos itérateurs267
Les générateurs269
Les générateurs simples269
Les générateurs comme coroutines271
24 TP : un jeu de cartes
275
Notre mission276
Session d'utilisation276
Explications277
Correction278
Pour conclure281
25 Les décorateurs
283
Qu'est-ce que c'est ?284
Syntaxe et exemples284
Présentation285
Un premier exemple : mesurer la durée de nos fonctions287
Des paramètres dans nos fonctions décorées289
Des décorateurs avec des paramètres290
La syntaxe sans classe293
Quelques décorateurs courants293
Les propriétés294
Les méthodes de classe295
Les méthodes statiques296
Les classes de données (dataclasses)297
26 Les métaclasses
301
Retour sur le processus d'instanciation302
La méthode __new__303
Créer une classe dynamiquement304
La méthode que nous connaissons304
Créer une classe dynamiquement305
Définition d'une métaclasse307
La méthode __new__308
La méthode __init__308
Les métaclasses en action309
Pour conclure310
IV Les merveilles de la bibliothèque standard313
27 Les expressions régulières
315
Que sont les expressions régulières ?316
Quelques éléments de syntaxe pour les expressions régulières316
Concrètement, comment cela se présente-t-il ?316
Des caractères ordinaires316
Rechercher au début ou à la fin de la chaîne317
Contrôler le nombre d'occurrences317
Les classes de caractères318
Les groupes318
Le module re318
Chercher dans une chaîne318
Remplacer une expression321
Des expressions compilées322
28 Le temps
325
Le module time326
Représenter une date et une heure dans un nombre unique326
La date et l'heure de façon plus présentable327
Récupérer un timestamp depuis une date328
Mettre en pause l'exécution du programme pendant un temps déterminé329
Formater un temps329
Bien d'autres fonctions330
Le module datetime330
Représenter une date330
Représenter une heure331
Représenter des dates et heures332
Différence de dates et durées332
29 Un peu de programmation système
335
Les flux standards336
Accéder aux flux standards336
Modifier les flux standards337
Les signaux338
Les différents signaux338
Intercepter un signal339
Interpréter les arguments de la ligne de commande340
Accéder à la console de Windows341
Accéder aux arguments de la ligne de commande341
Interpréter les arguments de la ligne de commande342
Exécuter une commande système depuis Python347
La fonction System347
La fonction popen348
30 Un peu de mathématiques
349
Pour commencer, le module math350
Fonctions usuelles350
Un peu de trigonométrie350
Arrondir un nombre351
Des fractions avec le module fractions352
Créer une fraction352
Manipuler les fractions353
Du pseudo-aléatoire avec random353
Du pseudo-aléatoire354
La fonction random354
randrange et randint354
Opérations sur des séquences355
31 Gestion des mots de passe
357
Obtenir un mot de passe saisi par l'utilisateur358
Chiffrer un mot de passe358
Générer des mots de passe aléatoires363
32 Le réseau
367
Brève présentation du réseau368
Le protocole TCP368
Clients et serveur368
Les différentes étapes369
Etablir une connexion369
Les sockets370
Construire notre socket370
Connecter le socket370
Faire écouter notre socket371
Accepter une connexion venant du client371
Création du client372
Connecter le client372
Faire communiquer nos sockets372
Fermer la connexion373
Le serveur373
Le client374
Un serveur plus élaboré375
Le module select376
Et encore plus379
33 Les tests unitaires avec unittest
381
Pourquoi tester ?382
Premiers exemples de tests unitaires383
Tester une fonctionnalité existante384
Les principales méthodes d'assertion391
La découverte automatique des tests392
Lancement de tests unitaires depuis un répertoire392
Structure d'un projet avec ses tests393
34 Déboguer son code avec pdb
395
Déboguer, ça sert à quoi ?396
Parlons de bogues396
Le débogueur n'est pas un plus397
pdb pour remonter à la source d'erreurs397
Lancer pdb398
Examiner le contexte400
Un remplacement de nom402
Pour conclure, ou continuer405
35 La programmation parallèle avec threading
407
Création de threads408
Premier exemple d'un thread408
La synchronisation des threads412
Opérations concurrentes412
Accès simultané à des ressources413
Les verrous à la rescousse414
36 La programmation asynchrone avec asyncio
417
La programmation asynchrone418
Retour au code418
Pourquoi une tâche se mettrait-elle en attente ?423
La puissance des tâches asynchrones424
Dépendances à installer424
Version synchrone425
Version asynchrone428
Quelques autres exemples432
37 Des interfaces graphiques avec Tkinter
435
Présentation de Tkinter436
Votre première interface graphique436
De nombreux widgets438
Les widgets les plus communs438
Organiser ses widgets dans la fenêtre441
Bien d'autres widgets441
Les commandes442
Pour conclure444
V Annexes445
38 Écrire nos programmes Python dans des fichiers
447
Garder le code dans un fichier448
Exécuter notre code sur Windows448
Sur les systèmes Unix449
Préciser l'encodage de travail450
Mettre notre programme en pause450
39 Distribuer facilement nos programmes Python avec Pylnstaller
453
En théorie454
Avantages de Pylnstaller454
En pratique454
Installation454
Utiliser le script pyinstaller455
40 De bonnes pratiques
457
Pourquoi suivre les conventions des PEP ?458
La PEP 20 : toute une philosophie458
La PEP 8 : des conventions précises460
Introduction460
Forme du code460
Directives d'importation461
Le signe espace dans les expressions et instructions462
Commentaires464
Conventions de nommage464
Conventions de programmation465
Conclusion466
La PEP 257 : de belles documentations466
Qu'est-ce qu'une docstring ?467
Les docstrings sur une seule ligne467
Les docstrings sur plusieurs lignes468
41 Installer et gérer nos dépendances en Python
471
Pourquoi apprendre à utiliser des dépendances en Python ?472
Installer des dépendances avec pi p473
Avant de commencer473
La commande pi p474
Installons flask475
Tester flask476
Les environnements indépendants477
Créer un environnement indépendant (virtualenv)479
Activer notre environnement indépendant479
Installer une dépendance dans notre environnement indépendant480
42 Pour finir et bien continuer
483
Quelques références484
La documentation officielle484
Le tutoriel officiel484
Le wiki Python485
L'index des PEP (Python Enhancement Proposai)485
La documentation par version485
Des bibliothèques tierces486
Pour créer une interface graphique486
Dans le monde du Web486
Un peu de réseau487
Pour conclure487
Index
489