Reference
Reference
Version 3.13.7
1 Introduction 3
1.1 Autres implé mentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Analyse lexicale 5
2.1 Structure des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Lignes logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Lignes physiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.3 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.4 Dé claration d’encodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.5 Continuation de ligne explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.6 Continuation de ligne implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.7 Lignes vierges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.8 Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.9 Espaces entre lexè mes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Autres lexè mes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Identifiants et mots-clé s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Mots-clé s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2 Mots-clé s ad hoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3 Classes ré servé es pour les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Litté raux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 Litté raux de chaînes de caractè res et de suites d’octets . . . . . . . . . . . . . . . . . . . 10
2.4.2 Concaté nation de chaînes de caractè res . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.3 f-strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.4 Litté raux numé riques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.5 Entiers litté raux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.6 Floating-point literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.7 Imaginaires litté raux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Opé rateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6 Dé limiteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Modèle de données 17
3.1 Objets, valeurs et types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Hié rarchie des types standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 None . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 NotImplemented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.3 Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.4 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.5 Sé quences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.6 Ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.7 Tableaux de correspondances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
i
3.2.8 Types appelables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.9 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.10 Classes dé claré es par le dé veloppeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.11 Instances de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.12 Objets entré es-sorties (ou objets fichiers) . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.13 Types internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3 Mé thodes spé ciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.1 Personnalisation de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.2 Personnalisation de l’accè s aux attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3.3 Personnalisation de la cré ation de classes . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.4 Personnalisation des instances et vé rification des sous-classes . . . . . . . . . . . . . . . . 46
3.3.5 Émulation de types gé né riques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3.6 Émulation d’objets appelables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.7 Émulation de types conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.8 Émulation de types numé riques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3.9 Gestionnaire de contexte With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.3.10 Arguments positionnels dans le filtrage par motif sur les classes . . . . . . . . . . . . . . 53
3.3.11 Emulating buffer types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3.12 Recherche des mé thodes spé ciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.1 Objets attendables (awaitable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.2 Objets coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.4.3 Ité rateurs asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.4.4 Gestionnaires de contexte asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4 Modèle d’exécution 59
4.1 Structure d’un programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2 Noms et liaisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.1 Liaisons des noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.2 Ré solution des noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.3 Annotation scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.4 Lazy evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.5 Noms natifs et restrictions d’exé cution . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.6 Interaction avec les fonctionnalité s dynamiques . . . . . . . . . . . . . . . . . . . . . . . 62
4.3 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5 Le système d’importation 65
5.1 importlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2 Les paquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2.1 Paquets classiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2.2 Paquets espaces de nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3 Recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.1 Cache des modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.2 Chercheurs et chargeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.3 Points d’entré es automatiques pour l’importation . . . . . . . . . . . . . . . . . . . . . . 68
5.3.4 Mé ta-chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4 Chargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.4.1 Chargeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.4.2 Sous-modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.4.3 Spé cificateurs de modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.4 l’attribut __path__ des modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.5 Repré sentation textuelle d’un module . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.6 Invalidation de bytecode mis en cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.5 Le chercheur dans path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.5.1 Chercheurs d’entré e dans path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.5.2 Protocole des chercheurs d’entré e dans path . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.6 Remplacement du systè me d’importation standard . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.7 Importations relatives au paquet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
ii
5.8 Cas particulier de __main__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.8.1 __main__.__spec__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.9 Ré fé rences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6 Expressions 77
6.1 Conversions arithmé tiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2 Atomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2.1 Identifiants (noms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2.2 Litté raux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2.3 Formes parenthé sé es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2.4 Agencements des listes, ensembles et dictionnaires . . . . . . . . . . . . . . . . . . . . . 79
6.2.5 Agencements de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.6 Agencements d’ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.2.7 Agencements de dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.2.8 Expressions gé né ratrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.2.9 Expressions yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.3 Primaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.3.1 Ré fé rences à des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.3.2 sé lection (ou indiçage) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.3 Tranches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.4 Appels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.4 Expression await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.5 L’opé rateur puissance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.6 Arithmé tique unaire et opé rations sur les bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.7 Opé rations arithmé tiques binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.8 Opé rations de dé calage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.9 Opé rations binaires bit à bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.10 Comparaisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.10.1 Comparaisons de valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.10.2 Opé rations de tests d’appartenance à un ensemble . . . . . . . . . . . . . . . . . . . . . 93
6.10.3 Comparaisons d’identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.11 Opé rations boolé ennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.12 Expressions d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.13 Expressions conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.14 Expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.15 Listes d’expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.16 Ordre d’é valuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.17 Priorité s des opé rateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
iii
8 Instructions composées 111
8.1 L’instruction if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.2 L’instruction while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.3 L’instruction for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.4 L’instruction try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.4.1 clause except . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.4.2 clause except* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.4.3 clause else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8.4.4 clause finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
8.5 L’instruction with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.6 L’instruction match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8.6.1 Aperçu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.6.2 Gardes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.6.3 Bloc case attrape-tout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.6.4 Filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.7 Dé finition de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.8 Dé finition de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
8.9 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.9.1 Dé finition de fonctions coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.9.2 L’instruction async for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.9.3 L’instruction async with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.10 Type parameter lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
8.10.1 Generic functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
8.10.2 Generic classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.10.3 Generic type aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
A Glossaire 155
iv
C.3.12 OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
C.3.13 expat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
C.3.14 libffi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
C.3.15 zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
C.3.16 cfuhash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
C.3.17 libmpdec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
C.3.18 Ensemble de tests C14N du W3C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
C.3.19 mimalloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
C.3.20 asyncio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
C.3.21 Global Unbounded Sequences (GUS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
D Copyright 195
Index 197
v
vi
The Python Language Reference, Version 3.13.7
Cette documentation dé crit la syntaxe et la « sé mantique interne » du langage. Elle peut ê tre laconique, mais essaye
d’ê tre exhaustive et exacte. La sé mantique des objets natifs secondaires, des fonctions, et des modules est documenté e
dans library-index. Pour une pré sentation informelle du langage, voyez plutô t tutorial-index. Pour les dé veloppeurs C
ou C++, deux manuels supplé mentaires existent : extending-index survole l’é criture d’extensions, et c-api-index dé crit
l’interface C/C++ en dé tail.
Introduction
Ce manuel de ré fé rence dé crit le langage de programmation Python. Il n’a pas vocation à ê tre un tutoriel.
Nous essayons d’ê tre le plus pré cis possible et nous utilisons le français (NdT : ou l’anglais pour les parties qui ne sont
pas encore traduites) plutô t que des spé cifications formelles, sauf pour la syntaxe et l’analyse lexicale. Nous espé rons
ainsi rendre ce document plus compré hensible pour un grand nombre de lecteurs, mê me si cela laisse un peu de place
à l’ambiguïté . En consé quence, si vous arrivez de Mars et que vous essayez de ré -implé menter Python à partir de cet
unique document, vous devrez faire des hypothè ses et, finalement, vous aurez certainement implé menté un langage
sensiblement diffé rent. D’un autre cô té , si vous utilisez Python et que vous vous demandez quelles rè gles s’appliquent
pour telle partie du langage, vous devriez trouver une ré ponse satisfaisante ici. Si vous souhaitez voir une dé finition
plus formelle du langage, nous acceptons toutes les bonnes volonté s (ou bien inventez une machine pour nous cloner
☺).
S’agissant du manuel de ré fé rence d’un langage, il est dangereux de rentrer profondé ment dans les dé tails d’implé -
mentation ; l’implé mentation peut changer et d’autres implé mentations du mê me langage peuvent fonctionner dif-
fé remment. En mê me temps, CPython est l’implé mentation de Python la plus ré pandue (bien que d’autres implé -
mentations gagnent en popularité ) et certaines de ses bizarreries mé ritent parfois d’ê tre mentionné es, en particulier
lorsque l’implé mentation impose des limitations supplé mentaires. Par consé quent, vous trouvez de courtes ”notes
d’implé mentation” saupoudré es dans le texte.
Chaque implé mentation de Python est livré e avec un certain nombre de modules natifs. Ceux-ci sont documenté s dans
library-index. Quelques modules natifs sont mentionné s quand ils interagissent significativement avec la dé finition du
langage.
3
The Python Language Reference, Version 3.13.7
1.2 Notations
The descriptions of lexical analysis and syntax use a modified Backus–Naur form (BNF) grammar notation. This
uses the following style of definition :
La premiè re ligne indique qu’un name est un lc_letter suivi d’une suite de zé ro ou plus lc_letters ou tiret bas.
Un lc_letter est, à son tour, l’un des caractè res 'a' à 'z' (cette rè gle est effectivement respecté e pour les noms
dé finis dans les rè gles lexicales et grammaticales de ce document).
Chaque rè gle commence par un nom (qui est le nom que la rè gle dé finit) et ::=. Une barre verticale (|) est utilisé e
pour sé parer les alternatives ; c’est l’opé rateur le moins prioritaire de cette notation. Une é toile (*) signifie zé ro ou
plusieurs ré pé titions de l’é lé ment pré cé dent ; de mê me, un plus (+) signifie une ou plusieurs ré pé titions, et une expres-
sion entre crochets ([ ]) signifie zé ro ou une occurrence (en d’autres termes, l’expression encadré e est facultative).
Les opé rateurs * et + agissent aussi é troitement que possible ; les parenthè ses sont utilisé es pour le regroupement.
Les chaînes litté rales sont entouré es de guillemets anglais ". L’espace n’est utilisé e que pour sé parer les lexè mes.
Les rè gles sont normalement contenues sur une seule ligne ; les rè gles avec de nombreuses alternatives peuvent ê tre
formaté es avec chaque ligne repré sentant une alternative (et donc dé butant par une barre verticale, sauf la premiè re).
Dans les dé finitions lexicales (comme dans l’exemple ci-dessus), deux autres conventions sont utilisé es : deux ca-
ractè res litté raux sé paré s par des points de suspension signifient le choix d’un seul caractè re dans la plage donné e
(en incluant les bornes) de caractè res ASCII. Une phrase entre les signes infé rieur et supé rieur (<...>) donne une
description informelle du symbole dé fini ; par exemple, pour dé crire la notion de ”caractè re de contrô le” si né cessaire.
Mê me si la notation utilisé e est presque la mê me, il existe une grande diffé rence entre la signification des dé finitions
lexicales et syntaxiques : une dé finition lexicale opè re sur les caractè res individuels de l’entré e, tandis qu’une dé finition
syntaxique opè re sur le flux de lexè mes gé né ré s par l’analyse lexicale. Toutes les notations sous la forme BNF dans
le chapitre suivant (« Analyse lexicale ») sont des dé finitions lexicales ; les notations dans les chapitres suivants sont
des dé finitions syntaxiques.
4 Chapitre 1. Introduction
CHAPITRE 2
Analyse lexicale
A Python program is read by a parser. Input to the parser is a stream of tokens, generated by the lexical analyzer (also
known as the tokenizer). This chapter describes how the lexical analyzer breaks a file into tokens.
Python lit le texte du programme comme des suites de caractè res Unicode ; l’encodage du fichier source peut ê tre
spé cifié par une dé claration d’encodage et vaut par dé faut UTF-8, voir la PEP 3120 pour les dé tails. Si le fichier
source ne peut pas ê tre dé codé , une exception SyntaxError (erreur de syntaxe) est levé e.
2.1.3 Commentaires
Un commentaire commence par le caractè re croisillon (#, hash en anglais et qui ressemble au symbole musical diè se,
c’est pourquoi il est souvent improprement appelé caractè re diè se) situé en dehors d’une chaine de caractè res litté rale
et se termine à la fin de la ligne physique. Un commentaire signifie la fin de la ligne logique à moins qu’une rè gle de
continuation de ligne implicite ne s’applique. Les commentaires sont ignoré s au niveau syntaxique, ce ne sont pas des
lexè mes.
5
The Python Language Reference, Version 3.13.7
# vim:fileencoding=<encoding-name>
Une ligne que se termine par une barre oblique inversé e ne peut pas avoir de commentaire. La barre oblique inversé e
ne permet pas de continuer un commentaire. La barre oblique inversé e ne permet pas de continuer un lexè me, sauf
s’il s’agit d’une chaîne de caractè res (par exemple, les lexè mes autres que les chaînes de caractè res ne peuvent pas
ê tre ré partis sur plusieurs lignes en utilisant une barre oblique inversé e). La barre oblique inversé e n’est pas autorisé e
ailleurs sur la ligne, en dehors d’une chaîne de caractè res.
Les lignes continué es implicitement peuvent avoir des commentaires. L’indentation des lignes de continuation n’est pas
importante. Une ligne blanche est autorisé e comme ligne de continuation. Il ne doit pas y avoir de lexè me NEWLINE
entre des lignes implicitement continué es. Les lignes continué es implicitement peuvent ê tre utilisé es dans des chaînes
entre triples guillemets (voir ci-dessous) ; dans ce cas, elles ne peuvent pas avoir de commentaires.
l’interpré teur standard, une ligne complè tement vierge (c’est-à -dire ne contenant strictement rien, mê me pas une
espace ou un commentaire) termine une instruction multi-lignes.
2.1.8 Indentation
Des espaces ou tabulations au dé but d’une ligne logique sont utilisé es pour connaître le niveau d’indentation de la
ligne, qui est ensuite utilisé pour dé terminer comment les instructions sont groupé es.
Les tabulations sont remplacé es (de la gauche vers la droite) par une à huit espaces de maniè re à ce que le nombre
de caractè res remplacé s soit un multiple de huit (nous avons ainsi la mê me rè gle que celle d’Unix). Le nombre total
d’espaces pré cé dant le premier caractè re non blanc dé termine alors le niveau d’indentation de la ligne. L’indentation
ne peut pas ê tre ré partie sur plusieurs lignes physiques à l’aide de barres obliques inversé es ; les espaces jusqu’à la
premiè re barre oblique inversé e dé terminent l’indentation.
L’indentation est dé claré e inconsistante et rejeté e si, dans un mê me fichier source, le mé lange des tabulations et
des espaces est tel que la signification dé pend du nombre d’espaces que repré sente une tabulation. Une exception
TabError est levé e dans ce cas.
Note de compatibilité entre les plateformes : en raison de la nature des é diteurs de texte sur les plateformes non
Unix, il n’est pas judicieux d’utiliser un mé lange d’espaces et de tabulations pour l’indentation dans un seul fichier
source. Il convient é galement de noter que des plateformes peuvent explicitement limiter le niveau d’indentation
maximal.
Un caractè re de saut de page peut ê tre pré sent au dé but de la ligne ; il est ignoré pour les calculs d’indentation ci-
dessus. Les caractè res de saut de page se trouvant ailleurs avec les espaces en tê te de ligne ont un effet indé fini (par
exemple, ils peuvent remettre à zé ro le nombre d’espaces).
Les niveaux d’indentation de lignes consé cutives sont utilisé s pour gé né rer les lexè mes INDENT et DEDENT, en
utilisant une pile, de cette façon :
Avant que la premiè re ligne du fichier ne soit lue, un « zé ro » est posé sur la pile ; il ne sera plus jamais enlevé . Les
nombres empilé s sont toujours strictement croissants de bas en haut. Au dé but de chaque ligne logique, le niveau
d’indentation de la ligne est comparé au sommet de la pile. S’ils sont é gaux, il ne se passe rien. S’il est plus grand, il
est empilé et un lexè me INDENT est produit. S’il est plus petit, il doit ê tre l’un des nombres pré sents dans la pile ;
tous les nombres de la pile qui sont plus grands sont retiré s et, pour chaque nombre retiré , un lexè me DEDENT est
produit. À la fin du fichier, un lexè me DEDENT est produit pour chaque nombre supé rieur à zé ro restant sur la pile.
Voici un exemple de code Python correctement indenté (bien que trè s confus) :
def perm(l):
# Compute the list of all permutations of l
if len(l) <= 1:
return [l]
r = []
for i in range(len(l)):
s = l[:i] + l[i+1:]
p = perm(s)
for x in p:
[Link](l[i:i+1] + x)
return r
En fait, les trois premiè res erreurs sont dé tecté es par l’analyseur syntaxique ; seule la derniè re erreur est trouvé e par
l’analyseur lexical (l’indentation de return r ne correspond à aucun niveau dans la pile).
2.3.1 Mots-clés
Les identifiants suivants sont des mots ré servé s par le langage et ne peuvent pas ê tre utilisé s en tant qu’identifiants
normaux. Ils doivent ê tre é crits exactement comme ci-dessous :
® Note
Le nom _ est souvent utilisé pour internationaliser l’affichage ; reportez-vous à la documentation du module
gettext pour plus d’informations sur cette convention.
Il est aussi communé ment utilisé pour signifier que la variable n’est pas utilisé e.
__*__
Noms dé finis par le systè me, appelé s noms « dunder » (pour Double Underscores) de maniè re informelle. Ces
noms sont dé finis par l’interpré teur et son implé mentation (y compris la bibliothè que standard). Les noms
actuels dé finis par le systè me sont abordé s dans la section Méthodes spéciales, mais aussi ailleurs. D’autres
noms seront probablement dé finis dans les futures versions de Python. Toute utilisation de noms de la forme
__*__, dans n’importe quel contexte, qui n’est pas conforme à ce qu’indique explicitement la documentation,
est sujette à des mauvaises surprises sans avertissement.
__*
Noms privé s pour une classe. Les noms de cette forme, lorsqu’ils sont utilisé s dans le contexte d’une dé finition
de classe, sont ré écrits sous une forme modifié e pour é viter les conflits de noms entre les attributs « privé s »
des classes de base et les classes dé rivé es. Voir la section Identifiants (noms).
2.4 Littéraux
Les litté raux sont des notations pour indiquer des valeurs constantes de certains types natifs.
Une restriction syntaxique non indiqué e par ces rè gles est qu’aucun blanc n’est autorisé entre le stringprefix ou
bytesprefix et le reste du litté ral. Le jeu de caractè res source est dé fini par la dé claration d’encodage ; il vaut
UTF-8 si aucune dé claration d’encodage n’est donné e dans le fichier source ; voir la section Déclaration d’encodage.
In plain English : Both types of literals can be enclosed in matching single quotes (') or double quotes ("). They can
also be enclosed in matching groups of three single or double quotes (these are generally referred to as triple-quoted
strings). The backslash (\) character is used to give special meaning to otherwise ordinary characters like n, which
means ’newline’ when escaped (\n). It can also be used to escape characters that otherwise have a special meaning,
such as newline, backslash itself, or the quote character. See escape sequences below for examples.
Les litté raux de suites d’octets sont toujours pré fixé s par 'b' ou 'B' ; cela cré e une instance de type bytes au lieu
du type str. Ils ne peuvent contenir que des caractè res ASCII ; les octets dont la valeur est supé rieure ou é gale à 128
doivent ê tre exprimé s à l’aide d’é chappements.
Both string and bytes literals may optionally be prefixed with a letter 'r' or 'R' ; such constructs are called raw
string literals and raw bytes literals respectively and treat backslashes as literal characters. As a result, in raw string
literals, '\U' and '\u' escapes are not treated specially.
Ajouté dans la version 3.3 : le pré fixe 'rb' a é té ajouté comme synonyme de 'br' pour les litté raux de suites d’octets.
la gestion du pré fixe historique pour les chaînes Unicode (u'chaine') a é té ré introduite afin de simplifier la main-
tenance de code compatible Python 2.x et 3.x. Voir la PEP 414 pour davantage d’informations.
Une chaîne litté rale qui contient 'f' ou 'F' dans le pré fixe est une chaîne de caractères littérale formatée ; lisez
f-strings. Le 'f' peut ê tre combiné avec 'r' mais pas avec 'b' ou 'u', donc les chaînes de caractè res formaté es
sont possibles mais les litté raux de suites d’octets ne peuvent pas l’ê tre.
Dans les chaînes entre triples guillemets, les sauts de ligne et guillemets peuvent ne pas ê tre é chappé s (et sont donc
pris en compte), mais trois guillemets non é chappé s à la suite terminent le litté ral (on entend par guillemet le caractè re
utilisé pour commencer le litté ral, c’est-à -dire ' ou ").
Escape sequences
À moins que le pré fixe 'r' ou 'R' ne soit pré sent, les sé quences d’é chappement dans les litté raux de chaînes et suites
d’octets sont interpré té es comme elles le seraient par le C Standard. Les sé quences d’é chappement reconnues sont :
Les sé quences d’é chappement reconnues seulement dans les chaînes litté rales sont :
Notes :
(1) A backslash can be added at the end of a line to ignore the newline :
The same result can be achieved using triple-quoted strings, or parentheses and string literal concatenation.
(2) Comme dans le C Standard, jusqu’à trois chiffres en base huit sont accepté s.
Modifié dans la version 3.11 : Octal escapes with value larger than 0o377 produce a DeprecationWarning.
Modifié dans la version 3.12 : Octal escapes with value larger than 0o377 produce a SyntaxWarning. In a
future Python version they will be eventually a SyntaxError.
(3) Contrairement au C Standard, il est obligatoire de fournir deux chiffres hexadé cimaux.
(4) Dans un litté ral de suite d’octets, un é chappement hexadé cimal ou octal est un octet dont la valeur est donné e.
Dans une chaîne litté rale, un é chappement est un caractè re Unicode dont le code est donné .
(5) Modifié dans la version 3.3 : Ajout du support pour les alias de noms 1 .
(6) Exactement quatre chiffres hexadé cimaux sont requis.
(7) N’importe quel caractè re Unicode peut ê tre encodé de cette façon. Exactement huit chiffres hexadé cimaux
sont requis.
Contrairement au C standard, toutes les sé quences d’é chappement non reconnues sont laissé es inchangé es dans la
chaîne, c’est-à -dire que la barre oblique inversée est laissée dans le résultat (ce comportement est utile en cas de
dé bogage : si une sé quence d’é chappement est mal tapé e, la sortie ré sultante est plus facilement reconnue comme
source de l’erreur). Notez bien é galement que les sé quences d’é chappement reconnues uniquement dans les litté raux
de chaînes de caractè res ne sont pas reconnues pour les litté raux de suites d’octets.
Modifié dans la version 3.6 : Unrecognized escape sequences produce a DeprecationWarning.
1. [Link]
2.4. Littéraux 11
The Python Language Reference, Version 3.13.7
Modifié dans la version 3.12 : Unrecognized escape sequences produce a SyntaxWarning. In a future Python version
they will be eventually a SyntaxError.
Mê me dans une chaîne litté rale brute, les guillemets peuvent ê tre é chappé s avec une barre oblique inversé e mais la
barre oblique inversé e reste dans le ré sultat ; par exemple, r"\"" est une chaîne de caractè res valide composé e de
deux caractè res : une barre oblique inversé e et un guillemet double ; r"\" n’est pas une chaîne de caractè res valide
(mê me une chaîne de caractè res brute ne peut pas se terminer par un nombre impair de barres obliques inversé es).
Plus pré cisé ment, une chaîne littérale brute ne peut pas se terminer par une seule barre oblique inversée (puisque la
barre oblique inversé e é chappe le guillemet suivant). Notez é galement qu’une simple barre oblique inversé e suivie
d’un saut de ligne est interpré té e comme deux caractè res faisant partie du litté ral et non comme une continuation de
ligne.
Notez que cette fonctionnalité agit au niveau syntaxique mais est implé menté e au moment de la compilation. Pour
concaté ner les expressions des chaînes de caractè res au moment de l’exé cution, vous devez utiliser l’opé rateur +.
Notez é galement que la concaté nation litté rale peut utiliser un style diffé rent de guillemets pour chaque composant
(et mê me mé langer des chaînes de caractè res brutes et des chaînes de caractè res entre triples guillemets). Enfin, les
chaînes de caractè res formaté es peuvent ê tre concaté né es avec des chaînes de caractè res ordinaires.
2.4.3 f-strings
Ajouté dans la version 3.6.
Une chaine de caractères littérale formatée ou f-string est une chaine de caractè res litté rale pré fixé e par 'f' ou 'F'.
Ces chaines peuvent contenir des champs à remplacer, c’est-à -dire des expressions dé limité es par des accolades {}.
Alors que les autres litté raux de chaines ont des valeurs constantes, les chaines formaté es sont de vraies expressions
é valué es à l’exé cution.
Les sé quences d’é chappement sont dé codé es comme à l’inté rieur des chaînes de caractè res ordinaires (sauf lorsqu’une
chaîne de caractè res est é galement marqué e comme une chaîne brute). Aprè s dé codage, la grammaire s’appliquant
au contenu de la chaîne de caractè res est :
Les portions qui sont en dehors des accolades sont traité es comme les litté raux, sauf les doubles accolades '{{'
ou '}}' qui sont remplacé es par la simple accolade correspondante. Une simple accolade ouvrante '{' marque le
dé but du champ à remplacer, qui commence par une expression Python. Pour afficher à la fois le texte de l’expression
et sa valeur une fois é valué e (utile lors du dé bogage), un signe é gal '=' peut ê tre ajouté aprè s l’expression. Ensuite,
il peut y avoir un champ de conversion, introduit par un point d’exclamation '!'. Une spé cification de format peut
aussi ê tre rajouté e, introduite par le caractè re deux-points ':'. Le champ à remplacer se termine par une accolade
fermante '}'.
Expressions in formatted string literals are treated like regular Python expressions surrounded by parentheses, with
a few exceptions. An empty expression is not allowed, and both lambda and assignment expressions := must be
surrounded by explicit parentheses. Each expression is evaluated in the context where the formatted string literal
appears, in order from left to right. Replacement expressions can contain newlines in both single-quoted and triple-
quoted f-strings and they can contain comments. Everything that comes after a # inside a replacement field is a
comment (even closing braces and quotes). In that case, replacement fields must be closed in a different line.
Modifié dans la version 3.7 : Avant Python 3.7, il é tait illé gal d’utiliser await ainsi que les compré hensions utilisant
async for dans les expressions au sein des chaînes de caractè res formaté es litté rales à cause d’un problè me dans
l’implé mentation.
Modifié dans la version 3.12 : Prior to Python 3.12, comments were not allowed inside f-string replacement fields.
Lorsqu’un signe é gal '=' est pré sent, la sortie comprend le texte de l’expression, le signe '=' et la valeur calculé e.
Les espaces aprè s l’accolade ouvrante '{', dans l’expression et aprè s le signe '=' sont conservé es à l’affichage. Par
dé faut, le signe '=' utilise la repr() de l’expression, sauf si un format est indiqué . Quand le format est indiqué , c’est
str() de l’expression qui est utilisé e à moins qu’une conversion !r ne soit dé claré e.
2.4. Littéraux 13
The Python Language Reference, Version 3.13.7
Reusing the outer f-string quoting type inside a replacement field is permitted :
>>> a = dict(x=2)
>>> f"abc {a["x"]} def"
'abc 2 def'
Modifié dans la version 3.12 : Prior to Python 3.12, reuse of the same quoting type of the outer f-string inside a
replacement field was not possible.
Backslashes are also allowed in replacement fields and are evaluated the same way as in any other context :
Modifié dans la version 3.12 : Prior to Python 3.12, backslashes were not permitted inside an f-string replacement
field.
Une chaine formaté e litté rale ne peut pas ê tre utilisé e en tant que docstring, mê me si elle ne comporte pas d’expression.
Consultez aussi la PEP 498 qui propose l’ajout des chaines formaté es litté rales et [Link]() qui utilise un
mé canisme similaire pour formater les chaînes de caractè res.
Il n’y a pas de limite pour la longueur des entiers litté raux, sauf celle relative à la capacité mé moire.
Les tirets bas sont ignoré s pour dé terminer la valeur numé rique du litté ral. Ils peuvent ê tre utilisé s pour grouper les
chiffres afin de faciliter la lecture. Un souligné peut ê tre placé entre des chiffres ou aprè s la spé cification de la base
telle que 0x.
Notez que placer des zé ros en tê te de nombre pour un nombre dé cimal diffé rent de zé ro n’est pas autorisé . Cela
permet d’é viter l’ambigü ité avec les litté raux en base octale selon le style C que Python utilisait avant la version 3.0.
Quelques exemples d’entiers litté raux :
Modifié dans la version 3.6 : Les tirets bas ne sont pas autorisé s pour grouper les litté raux.
Modifié dans la version 3.6 : Les tirets bas ne sont pas autorisé s pour grouper les litté raux.
An imaginary literal yields a complex number with a real part of 0.0. Complex numbers are represented as a pair of
floating-point numbers and have the same restrictions on their range. To create a complex number with a nonzero
real part, add a floating-point number to it, e.g., (3+4j). Some examples of imaginary literals :
2.5 Opérateurs
Les lexè mes suivants sont des opé rateurs :
+ - * ** / // % @
<< >> & | ^ ~ :=
< > <= >= == !=
2.5. Opérateurs 15
The Python Language Reference, Version 3.13.7
2.6 Délimiteurs
Les lexè mes suivants servent de dé limiteurs dans la grammaire :
( ) [ ] { }
, : ! . ; @ =
-> += -= *= /= //= %=
@= &= |= ^= >>= <<= **=
Le point peut aussi apparaître dans les litté raux de nombres à virgule flottante et imaginaires. Une suite de trois points
possè de une signification spé ciale : c’est une ellipse litté rale. La deuxiè me partie de la liste, les opé rateurs d’affectation
augmenté s, servent de dé limiteurs pour l’analyseur lexical mais sont aussi des opé rateurs.
Les caractè res ASCII suivants ont une signification spé ciale en tant que partie d’autres lexè mes ou ont une signification
particuliè re pour l’analyseur lexical :
' " # \
Les caractè res ASCII suivants ne sont pas utilisé s en Python. S’ils apparaissent en dehors de chaines litté rales ou de
commentaires, ils produisent une erreur :
$ ? `
Notes
Modèle de données
17
The Python Language Reference, Version 3.13.7
Note that the use of the implementation’s tracing or debugging facilities may keep objects alive that would normally
be collectable. Also note that catching an exception with a try ...except statement may keep objects alive.
Some objects contain references to ”external” resources such as open files or windows. It is understood that these
resources are freed when the object is garbage-collected, but since garbage collection is not guaranteed to happen,
such objects also provide an explicit way to release the external resource, usually a close() method. Programs
are strongly recommended to explicitly close such objects. The try ...finally statement and the with statement
provide convenient ways to do this.
Certains objets contiennent des ré fé rences à d’autres objets ; on les appelle conteneurs. Comme exemples de conte-
neurs, nous pouvons citer les n-uplets, les listes et les dictionnaires. Les ré fé rences sont parties inté grantes de la valeur
d’un conteneur. Dans la plupart des cas, lorsque nous parlons de la valeur d’un conteneur, nous parlons des valeurs,
pas des identifiants des objets contenus ; cependant, lorsque nous parlons de la muabilité d’un conteneur, seuls les
identifiants des objets immé diatement contenus sont concerné s. Ainsi, si un conteneur immuable (comme un n-uplet)
contient une ré fé rence à un objet mutable, sa valeur change si cet objet mutable est modifié .
Types affect almost all aspects of object behavior. Even the importance of object identity is affected in some sense :
for immutable types, operations that compute new values may actually return a reference to any existing object with
the same type and value, while for mutable objects this is not allowed. For example, after a = 1; b = 1, a and b
may or may not refer to the same object with the value one, depending on the implementation. This is because int
is an immutable type, so the reference to 1 can be reused. This behaviour depends on the implementation used, so
should not be relied upon, but is something to be aware of when making use of object identity tests. However, after
c = []; d = [], c and d are guaranteed to refer to two different, unique, newly created empty lists. (Note that e
= f = [] assigns the same object to both e and f.)
3.2.1 None
Ce type ne possè de qu’une seule valeur. Il n’existe qu’un seul objet avec cette valeur. Vous accé dez à cet objet avec le
nom natif None. Il est utilisé pour signifier l’absence de valeur dans de nombreux cas, par exemple pour des fonctions
qui ne renvoient rien explicitement. Sa valeur boolé enne est fausse.
3.2.2 NotImplemented
This type has a single value. There is a single object with this value. This object is accessed through the built-in
name NotImplemented. Numeric methods and rich comparison methods should return this value if they do not
implement the operation for the operands provided. (The interpreter will then try the reflected operation, or some
other fallback, depending on the operator.) It should not be evaluated in a boolean context.
Consultez implementing-the-arithmetic-operations pour davantage de dé tails.
Modifié dans la version 3.9 : Evaluating NotImplemented in a boolean context is deprecated. While it currently
evaluates as true, it will emit a DeprecationWarning. It will raise a TypeError in a future version of Python.
3.2.3 Ellipse
Ce type ne possè de qu’une seule valeur. Il n’existe qu’un seul objet avec cette valeur. Vous accé dez à cet objet avec le
litté ral ... ou le nom natif Ellipsis. Sa valeur boolé enne est vraie.
3.2.4 [Link]
Ces objets sont cré és par les litté raux numé riques et renvoyé s en tant que ré sultats par les opé rateurs et les fonctions
arithmé tiques natives. Les objets numé riques sont immuables ; une fois cré és, leur valeur ne change pas. Les nombres
Python sont bien sû r trè s fortement corré lé s aux nombres mathé matiques mais ils sont soumis aux limitations des
repré sentations numé riques par les ordinateurs.
Les repré sentations sous forme de chaînes de caractè res des objets numé riques, produites par __repr__() et
__str__(), ont les proprié té s suivantes :
— Ce sont des litté raux numé riques valides qui, s’ils sont passé s au constructeur de leur classe, produisent un
objet qui a la valeur numé rique de l’objet d’origine.
— La repré sentation est en base 10, si possible.
— Les zé ros en tê te, sauf en ce qui concerne un zé ro seul avant la virgule (repré senté e par un point en Python
conformé ment à la convention anglo-saxonne), ne sont pas affiché s.
— Les zé ros en fin, sauf en ce qui concerne un zé ro seul aprè s la virgule, ne sont pas affiché s.
— Le signe n’est affiché que lorsque le nombre est né gatif.
Python distinguishes between integers, floating-point numbers, and complex numbers :
[Link]
Ils repré sentent des é lé ments de l’ensemble mathé matique des entiers (positifs ou né gatifs).
® Note
Les rè gles pour la repré sentation des entiers ont pour objet de donner l’interpré tation la plus naturelle pour les
opé rations de dé calage et masquage qui impliquent des entiers né gatifs.
[Link] (float)
These represent machine-level double precision floating-point numbers. You are at the mercy of the underlying ma-
chine architecture (and C or Java implementation) for the accepted range and handling of overflow. Python does
not support single-precision floating-point numbers ; the savings in processor and memory usage that are usually the
reason for using these are dwarfed by the overhead of using objects in Python, so there is no reason to complicate
the language with two kinds of floating-point numbers.
[Link] (complex)
These represent complex numbers as a pair of machine-level double precision floating-point numbers. The same
caveats apply as for floating-point numbers. The real and imaginary parts of a complex number z can be retrieved
through the read-only attributes [Link] and [Link].
3.2.5 Séquences
These represent finite ordered sets indexed by non-negative numbers. The built-in function len() returns the number
of items of a sequence. When the length of a sequence is n, the index set contains the numbers 0, 1, ..., n-1. Item
i of sequence a is selected by a[i]. Some sequences, including built-in sequences, interpret negative subscripts by
adding the sequence length. For example, a[-2] equals a[n-2], the second to last item of sequence a with length
n.
Sequences also support slicing : a[i:j] selects all items with index k such that i <= k < j. When used as an expression,
a slice is a sequence of the same type. The comment above about negative indexes also applies to negative slice
positions.
Quelques sé quences gè rent le « dé coupage é tendu » (extended slicing en anglais) avec un troisiè me paramè tre :
a[i:j:k] sé lectionne tous les é lé ments de a d’indice x où x = i + n*k, avec n >= 0 et i <= x < j.
Séquences immuables
Un objet de type de sé quence immuable ne peut pas ê tre modifié une fois qu’il a é té cré é. Si l’objet contient des
ré fé rences à d’autres objets, ces autres objets peuvent ê tre mutables et peuvent ê tre modifié s ; cependant, les objets
directement ré fé rencé s par un objet immuable ne peuvent pas ê tre modifié s.
Les types suivants sont des sé quences immuables :
Chaînes de caractères
A string is a sequence of values that represent Unicode code points. All the code points in the range U+0000
- U+10FFFF can be represented in a string. Python doesn’t have a char type ; instead, every code point in
the string is represented as a string object with length 1. The built-in function ord() converts a code point
from its string form to an integer in the range 0 - 10FFFF ; chr() converts an integer in the range 0 -
10FFFF to the corresponding length 1 string object. [Link]() can be used to convert a str to bytes
using the given text encoding, and [Link]() can be used to achieve the opposite.
n-uplets (tuples en anglais)
Les é lé ments d’un n-uplet peuvent ê tre n’importe quel objet Python. Les n-uplets de deux é lé ments ou plus sont
formé s par une liste d’expressions dont les é lé ments sont sé paré s par des virgules. Un n-uplet composé d’un
seul é lé ment (un « singleton ») est formé en suffixant une expression avec une virgule (une expression en tant
que telle ne cré e pas un n-uplet car les parenthè ses doivent rester disponibles pour grouper les expressions).
Un n-uplet vide est formé à l’aide d’une paire de parenthè ses vide.
Chaînes d’octets (ou bytes)
A bytes object is an immutable array. The items are 8-bit bytes, represented by integers in the range 0 <= x
< 256. Bytes literals (like b'abc') and the built-in bytes() constructor can be used to create bytes objects.
Also, bytes objects can be decoded to strings via the decode() method.
Séquences mutables
Les sé quences mutables peuvent ê tre modifié es aprè s leur cré ation. Les notations de tranches et de sous-ensembles
peuvent ê tre utilisé es en tant que cibles d’une affectation ou de l’instruction del (suppression).
® Note
The collections and array module provide additional examples of mutable sequence types.
3.2.6 Ensembles
Ils repré sentent les ensembles d’objets, non ordonné s, finis et dont les é lé ments sont uniques. Tels quels, ils ne peuvent
pas ê tre indicé s. Cependant, il est possible d’ité rer dessus et la fonction native len() renvoie le nombre d’é lé ments
de l’ensemble. Les utilisations classiques des ensembles sont les tests d’appartenance rapides, la suppression de dou-
blons dans une sé quence et le calcul d’opé rations mathé matiques telles que l’intersection, l’union, la diffé rence et le
complé mentaire.
Pour les é lé ments des ensembles, les mê mes rè gles concernant l’immuabilité s’appliquent que pour les clé s de diction-
naires. Notez que les types numé riques obé issent aux rè gles normales pour les comparaisons numé riques : si deux
nombres sont é gaux (pour l’opé ration de comparaison, par exemple 1 et 1.0), un seul é lé ment est conservé dans
l’ensemble.
Actuellement, il existe deux types d’ensembles natifs :
Ensembles
Ils repré sentent les ensembles mutables. Un ensemble est cré é par la fonction native constructeur set() et
peut ê tre modifié par la suite à l’aide de diffé rentes mé thodes, par exemple add().
Ensembles figés
Ils repré sentent les ensembles immuables. Ils sont cré és par la fonction native constructeur frozenset().
Comme un ensemble figé est immuable et hachable, il peut ê tre utilisé comme é lé ment d’un autre ensemble
ou comme clé de dictionnaire.
Dictionnaires
Ils repré sentent les ensembles finis d’objets indicé s par des valeurs presque arbitraires. Les seuls types de valeurs non
reconnus comme clé s sont les valeurs contenant des listes, des dictionnaires ou les autres types mutables qui sont
comparé s par valeur plutô t que par l’identifiant de l’objet. La raison de cette limitation est qu’une implé mentation
efficace de dictionnaire requiert que l’empreinte par hachage des clé s reste constante dans le temps. Les types numé -
riques obé issent aux rè gles normales pour les comparaisons numé riques : si deux nombres sont é gaux pour l’opé ration
de comparaison, par exemple 1 et 1.0, alors ces deux nombres peuvent ê tre utilisé s indiffé remment pour dé signer
la mê me entré e du dictionnaire.
Les dictionnaires pré servent l’ordre d’insertion, ce qui signifie que les clé s sont renvoyé es sé quentiellement dans le
mê me ordre que celui de l’insertion. Remplacer une clé existante ne change pas l’ordre. Par contre, la retirer puis la
ré insé rer la met à la fin et non à sa pré cé dente position.
Dictionaries are mutable ; they can be created by the {} notation (see section Agencements de dictionnaires).
Les modules d’extensions [Link] et [Link] apportent d’autres exemples de types tableaux de correspondances,
de mê me que le module collections.
Modifié dans la version 3.7 : les dictionnaires ne conservaient pas l’ordre d’insertion dans les versions anté rieures à Py-
thon 3.6. Dans CPython 3.6, l’ordre d’insertion é tait dé jà conservé , mais considé ré comme un dé tail d’implé mentation
et non comme une garantie du langage.
Attribut Signification
A reference to the dictionary that holds the func-
function.__globals__ tion’s global variables -- the global namespace of the
module in which the function was defined.
None or a tuple of cells that contain bindings for the
function.__closure__ names specified in the co_freevars attribute of the
function’s code object.
Un objet cellule possè de un attribut cell_contents.
Il peut ê tre utilisé pour obtenir la valeur de la cellule et
pour en dé finir la valeur.
Attribut Signification
The function’s documentation string, or None if unavai-
function.__doc__ lable.
Function objects also support getting and setting arbitrary attributes, which can be used, for example, to attach me-
tadata to functions. Regular attribute dot-notation is used to get and set such attributes.
Particularité de l’implémentation CPython : CPython’s current implementation only supports function attributes
on user-defined functions. Function attributes on built-in functions may be supported in the future.
Additional information about a function’s definition can be retrieved from its code object (accessible via the __code__
attribute).
Méthodes d’instances
Un objet mé thode d’instance combine une classe, une instance de classe et tout objet appelable (normalement une
fonction dé finie par l’utilisateur).
Special read-only attributes :
Methods also support accessing (but not setting) the arbitrary function attributes on the underlying function object.
User-defined method objects may be created when getting an attribute of a class (perhaps via an instance of that
class), if that attribute is a user-defined function object or a classmethod object.
When an instance method object is created by retrieving a user-defined function object from a class via one of its
instances, its __self__ attribute is the instance, and the method object is said to be bound. The new method’s
__func__ attribute is the original function object.
When an instance method object is created by retrieving a classmethod object from a class or instance, its
__self__ attribute is the class itself, and its __func__ attribute is the function object underlying the class me-
thod.
When an instance method object is called, the underlying function (__func__) is called, inserting the class instance
(__self__) in front of the argument list. For instance, when C is a class which contains a definition for a function
f(), and x is an instance of C, calling x.f(1) is equivalent to calling C.f(x, 1).
When an instance method object is derived from a classmethod object, the ”class instance” stored in __self__
will actually be the class itself, so that calling either x.f(1) or C.f(1) is equivalent to calling f(C,1) where f is
the underlying function.
It is important to note that user-defined functions which are attributes of a class instance are not converted to bound
methods ; this only happens when the function is an attribute of the class.
ou se termine, une exception StopIteration est levé e et l’ité rateur a atteint la fin de l’ensemble de valeurs qu’il
peut renvoyer.
Fonctions coroutines
Une fonction ou mé thode dé finie en utilisant async def est appelé e fonction coroutine. Une telle fonction, quand elle
est appelé e, renvoie un objet coroutine. Elle peut contenir des expressions await ou async with ou des instructions
async for. Voir é galement la section Objets coroutines.
Fonctions natives
A built-in function object is a wrapper around a C function. Examples of built-in functions are len() and math.
sin() (math is a standard built-in module). The number and type of the arguments are determined by the C function.
Special read-only attributes :
— __doc__ is the function’s documentation string, or None if unavailable. See function.__doc__.
— __name__ is the function’s name. See function.__name__.
— __self__ is set to None (but see the next item).
— __module__ is the name of the module the function was defined in or None if unavailable. See function.
__module__.
Méthodes natives
This is really a different disguise of a built-in function, this time containing an object passed to the C function as an
implicit extra argument. An example of a built-in method is [Link](), assuming alist is a list object. In
this case, the special read-only attribute __self__ is set to the object denoted by alist. (The attribute has the same
semantics as it does with other instance methods.)
Classes
Classes are callable. These objects normally act as factories for new instances of themselves, but variations are possible
for class types that override __new__(). The arguments of the call are passed to __new__() and, in the typical case,
to __init__() to initialize the new instance.
Instances de classe
Les instances d’une classe peuvent devenir des appelables si vous dé finissez la mé thode __call__() de leur classe.
3.2.9 Modules
Modules are a basic organizational unit of Python code, and are created by the import system as invoked either by the
import statement, or by calling functions such as importlib.import_module() and built-in __import__().
A module object has a namespace implemented by a dictionary object (this is the dictionary referenced by the
__globals__ attribute of functions defined in the module). Attribute references are translated to lookups in this
dictionary, e.g., m.x is equivalent to m.__dict__["x"]. A module object does not contain the code object used to
initialize the module (since it isn’t needed once the initialization is done).
L’affectation d’un attribut met à jour le dictionnaire d’espace de nommage du module, par exemple m.x = 1 est
é quivalent à m.__dict__["x"] = 1.
Ϫ Prudence
With the exception of __name__, it is strongly recommended that you rely on __spec__ and its attributes ins-
tead of any of the other individual attributes listed in this subsection. Note that updating an attribute on __spec__
will not update the corresponding attribute on the module itself :
>>> import typing
>>> typing.__name__, typing.__spec__.name
('typing', 'typing')
>>> typing.__spec__.name = 'spelling'
>>> typing.__name__, typing.__spec__.name
('typing', 'spelling')
>>> typing.__name__ = 'keyboard_smashing'
>>> typing.__name__, typing.__spec__.name
('keyboard_smashing', 'spelling')
module.__name__
The name used to uniquely identify the module in the import system. For a directly executed module, this will
be set to "__main__".
This attribute must be set to the fully qualified name of the module. It is expected to match the value of
module.__spec__.name.
module.__spec__
A record of the module’s import-system-related state.
Set to the module spec that was used when importing the module. See Spécificateurs de modules for more
details.
Ajouté dans la version 3.4.
module.__package__
The package a module belongs to.
If the module is top-level (that is, not a part of any specific package) then the attribute should be set to ''
(the empty string). Otherwise, it should be set to the name of the module’s package (which can be equal to
module.__name__ if the module itself is a package). See PEP 366 for further details.
This attribute is used instead of __name__ to calculate explicit relative imports for main modules. It defaults to
None for modules created dynamically using the [Link] constructor ; use [Link].
module_from_spec() instead to ensure the attribute is set to a str.
Modifié dans la version 3.6 : The value of __package__ is expected to be the same as __spec__.parent.
__package__ is now only used as a fallback during import resolution if __spec__.parent is not defined.
Modifié dans la version 3.10 : ImportWarning is raised if an import resolution falls back to __package__
instead of __spec__.parent.
Modifié dans la version 3.12 : Raise DeprecationWarning instead of ImportWarning when falling back
to __package__ during import resolution.
Deprecated since version 3.13, will be removed in version 3.15 : __package__ will cease to be set or taken
into consideration by the import system or standard library.
module.__loader__
The loader object that the import machinery used to load the module.
This attribute is mostly useful for introspection, but can be used for additional loader-specific functionality, for
example getting data associated with a loader.
__loader__ defaults to None for modules created dynamically using the [Link] constructor ;
use [Link].module_from_spec() instead to ensure the attribute is set to a loader object.
It is strongly recommended that you use module.__spec__.loader instead of module.__loader__.
Modifié dans la version 3.4 : This attribute now defaults to None for modules created dynamically using the
[Link] constructor. Previously the attribute was optional.
Deprecated since version 3.12, will be removed in version 3.16 : Setting __loader__ on a module while
failing to set __spec__.loader is deprecated. In Python 3.16, __loader__ will cease to be set or taken
into consideration by the import system or the standard library.
module.__path__
A (possibly empty) sequence of strings enumerating the locations where the package’s submodules will be
found. Non-package modules should not have a __path__ attribute. See l’attribut __path__ des modules for
more details.
It is strongly recommended that you use module.__spec__.submodule_search_locations instead of
module.__path__.
module.__file__
module.__cached__
__file__ and __cached__ are both optional attributes that may or may not be set. Both attributes should
be a str when they are available.
__file__ indicates the pathname of the file from which the module was loaded (if loaded from a file), or the
pathname of the shared library file for extension modules loaded dynamically from a shared library. It might
be missing for certain types of modules, such as C modules that are statically linked into the interpreter, and
the import system may opt to leave it unset if it has no semantic meaning (for example, a module loaded from
a database).
If __file__ is set then the __cached__ attribute might also be set, which is the path to any compiled version
of the code (for example, a byte-compiled file). The file does not need to exist to set this attribute ; the path
can simply point to where the compiled file would exist (see PEP 3147).
Note that __cached__ may be set even if __file__ is not set. However, that scenario is quite atypical.
Ultimately, the loader is what makes use of the module spec provided by the finder (from which __file__
and __cached__ are derived). So if a loader can load from a cached module but otherwise does not load from
a file, that atypical scenario may be appropriate.
It is strongly recommended that you use module.__spec__.cached instead of module.__cached__.
Deprecated since version 3.13, will be removed in version 3.15 : Setting __cached__ on a module while
failing to set __spec__.cached is deprecated. In Python 3.15, __cached__ will cease to be set or taken
into consideration by the import system or standard library.
Module dictionaries
Module objects also have the following special read-only attribute :
module.__dict__
The module’s namespace as a dictionary object. Uniquely among the attributes listed here, __dict__ cannot
be accessed as a global variable from within a module ; it can only be accessed as an attribute on module
objects.
en raison de la maniè re dont CPython nettoie les dictionnaires de modules, le dictionnaire du module est effacé
quand le module n’est plus visible, mê me si le dictionnaire possè de encore des ré fé rences actives. Pour é viter
ceci, copiez le dictionnaire ou gardez le module dans votre champ de visibilité tant que vous souhaitez utiliser
le dictionnaire directement.
Special attributes
Attribut Signification
The class’s name. See also : __name__ attributes.
type.__name__
Ϫ Prudence
Special methods
In addition to the special attributes described above, all Python classes also have the following two methods available :
[Link]()
This method can be overridden by a metaclass to customize the method resolution order for its instances. It is
Special attributes
object.__class__
Classe de l’instance de classe.
object.__dict__
A dictionary or other mapping object used to store an object’s (writable) attributes. Not all instances have a
__dict__ attribute ; see the section on créneaux prédéfinis (__slots__) for more details.
Objets Code
Un objet code repré sente le code Python sous sa forme compilé e en code intermédiaire. La diffé rence entre un objet
code et un objet fonction est que l’objet fonction contient une ré fé rence explicite vers les globales de la fonction (le
module dans lequel elle est dé finie) alors qu’un objet code ne contient aucun contexte ; par ailleurs, les valeurs par
dé faut des arguments sont stocké es dans l’objet fonction, pas dans l’objet code (parce que ce sont des valeurs calculé es
au moment de l’exé cution). Contrairement aux objets fonctions, les objets codes sont immuables et ne contiennent
aucune ré fé rence (directe ou indirecte) à des objets mutables.
The name of the file from which the code was compiled
codeobject.co_filename
The following flag bits are defined for co_flags : bit 0x04 is set if the function uses the *arguments syntax to
accept an arbitrary number of positional arguments ; bit 0x08 is set if the function uses the **keywords syntax to
accept arbitrary keyword arguments ; bit 0x20 is set if the function is a generator. See inspect-module-co-flags for
details on the semantics of each flags that might be present.
Future feature declarations (for example, from __future__ import division) also use bits in co_flags to
indicate whether a code object was compiled with a particular feature enabled. See compiler_flag.
Other bits in co_flags are reserved for internal use.
If a code object represents a function, the first item in co_consts is the documentation string of the function, or
None if undefined.
codeobject.co_positions()
Returns an iterable over the source code positions of each bytecode instruction in the code object.
The iterator returns tuples containing the (start_line, end_line, start_column, end_column).
The i-th tuple corresponds to the position of the source code that compiled to the i-th code unit. Column
information is 0-indexed utf-8 byte offsets on the given source line.
L’information sur la position peut ê tre manquante. Ce peut ê tre le cas si (liste non exhaustive) :
— l’interpré teur est lancé avec l’option -X no_debug_ranges ;
— le fichier .pyc est le produit d’une compilation avec l’option -X no_debug_ranges ;
— le n-uplet de position correspond à des instructions artificielles ;
— les lignes et colonnes ne peuvent pas ê tre repré senté es en tant que nombre, en raison de limitations dues à
l’implé mentation ;
Dans ce cas, certains ou tous les é lé ments du n-uplet peuvent valoir None.
Ajouté dans la version 3.11.
® Note
cette fonctionnalité né cessite de stocker les positions de colonne dans les objets code, ce qui peut conduire
à une lé gè re augmentation de l’utilisation du disque par les fichiers Python compilé s ou de l’utilisation de
la mé moire. Pour é viter de stocker cette information supplé mentaire ou pour dé sactiver l’affichage supplé -
mentaire dans la pile d’appels, vous pouvez activer l’option de ligne de commande -X no_debug_ranges
ou la variable d’environnement PYTHONNODEBUGRANGES.
codeobject.co_lines()
Returns an iterator that yields information about successive ranges of bytecodes. Each item yielded is a
(start, end, lineno) tuple :
— start (an int) represents the offset (inclusive) of the start of the bytecode range
— end (an int) represents the offset (exclusive) of the end of the bytecode range
— lineno is an int representing the line number of the bytecode range, or None if the bytecodes in the
given range have no line number
The items yielded will have the following properties :
— The first range yielded will have a start of 0.
— The (start, end) ranges will be non-decreasing and consecutive. That is, for any pair of tuples, the
start of the second will be equal to the end of the first.
— No range will be backwards : end >= start for all triples.
— The last tuple yielded will have end equal to the size of the bytecode.
Zero-width ranges, where start == end, are allowed. Zero-width ranges are used for lines that are present
in the source code, but have been eliminated by the bytecode compiler.
Ajouté dans la version 3.10.
µ Voir aussi
PEP 626 - Precise line numbers for debugging and other tools.
The PEP that introduced the co_lines() method.
[Link](**kwargs)
Return a copy of the code object with new values for the specified fields.
Code objects are also supported by the generic function [Link]().
Ajouté dans la version 3.8.
Objets cadres
Frame objects represent execution frames. They may occur in traceback objects, and are also passed to registered
trace functions.
The line number and last instruction in the traceback may differ from the line number of its frame object if the
exception occurred in a try statement with no matching except clause or with a finally clause.
traceback.tb_next
The special writable attribute tb_next is the next level in the stack trace (towards the frame where the ex-
ception occurred), or None if there is no next level.
Modifié dans la version 3.7 : This attribute is now writable
Objets tranches
Un objet tranche est utilisé pour repré senter des dé coupes des mé thodes __getitem__(). Ils sont aussi cré és par
la fonction native slice().
Attributs spé ciaux en lecture seule : start est la borne infé rieure ; stop est la borne supé rieure ; step est la valeur
du pas ; chaque attribut vaut None s’il est omis. Ces attributs peuvent ê tre de n’importe quel type.
Les objets tranches comprennent une mé thode :
[Link](self, length)
Cette mé thode prend un argument entier length et calcule les informations de la tranche que l’objet slice dé crit
s’il est appliqué à une sé quence de length é lé ments. Elle renvoie un triplet d’entiers ; respectivement, ce sont les
indices de début et fin ainsi que le pas de dé coupe. Les indices manquants ou en dehors sont gé ré s de maniè re
cohé rente avec les tranches normales.
de cette classe, alors x[i] est globalement é quivalent à type(x).__getitem__(x, i). Sauf lorsque c’est men-
tionné , toute tentative d’appliquer une opé ration alors que la mé thode approprié e n’est pas dé finie lè ve une exception
(typiquement AttributeError ou TypeError).
Dé finir une mé thode spé ciale à None indique que l’opé ration correspondante n’est pas disponible. Par exemple, si une
classe assigne None à __iter__(), vous ne pouvez pas ité rer sur la classe et appeler iter() sur une instance lè ve
TypeError (sans se replier sur __getitem__()) 2 .
Lorsque vous implé mentez une classe qui é mule un type natif, il est important que cette é mulation n’implé mente
que ce qui fait sens pour l’objet qui est modé lisé . Par exemple, la recherche d’é lé ments individuels d’une sé quence
peut faire sens, mais pas l’extraction d’une tranche (un exemple est l’interface de NodeList dans le modè le objet des
documents W3C).
is garbage collected.
® Note
del x n’appelle pas directement x.__del__() — la premiè re dé cré mente le compteur de ré fé rences de
x. La seconde n’est appelé e que quand le compteur de ré fé rences de x atteint zé ro.
Particularité de l’implémentation CPython : It is possible for a reference cycle to prevent the reference count
of an object from going to zero. In this case, the cycle will be later detected and deleted by the cyclic garbage
collector. A common cause of reference cycles is when an exception has been caught in a local variable. The
frame’s locals then reference the exception, which references its own traceback, which references the locals of
all frames caught in the traceback.
µ Voir aussi
Á Avertissement
en raison des conditions particuliè res qui rè gnent quand __del__() est appelé e, les exceptions levé es
pendant son exé cution sont ignoré es et, à la place, un avertissement est affiché sur [Link]. En par-
ticulier :
— __del__() peut ê tre invoqué e quand du code arbitraire est en cours d’exé cution, et ce dans n’im-
porte quel fil d’exé cution. Si __del__() a besoin de poser un verrou ou d’accé der à tout autre
ressource bloquante, elle peut provoquer un blocage mutuel (deadlock en anglais) car la ressource
peut ê tre dé jà utilisé e par le code qui est interrompu pour exé cuter la mé thode __del__().
— __del__() peut ê tre exé cuté e pendant que l’interpré teur se ferme. En consé quence, les variables
globales auxquelles elle souhaite accé der (y compris les autres modules) peuvent dé jà ê tre dé truites
ou assigné es à None. Python garantit que les variables globales dont le nom commence par un
tiret bas sont supprimé es de leur module avant que les autres variables globales ne le soient ; si
aucune autre ré fé rence vers ces variables globales n’existe, cela peut aider à s’assurer que les modules
importé s soient toujours accessibles au moment où la mé thode __del__() est appelé e.
object.__repr__(self )
Appelé e par la fonction native repr() pour calculer la repré sentation « officielle » en chaîne de caractè res
d’un objet. Tout est fait pour que celle-ci ressemble à une expression Python valide pouvant ê tre utilisé e pour
recré er un objet avec la mê me valeur (dans un environnement donné ). Si ce n’est pas possible, une chaîne
de la forme <…une description utile…> est renvoyé e. La valeur renvoyé e doit ê tre un objet chaîne de
caractè res. Si une classe dé finit __repr__() mais pas __str__(), alors __repr__() est aussi utilisé e quand
une repré sentation « informelle » en chaîne de caractè res est demandé e pour une instance de cette classe.
This is typically used for debugging, so it is important that the representation is information-rich and unambi-
guous. A default implementation is provided by the object class itself.
object.__str__(self )
Called by str(object), the default __format__() implementation, and the built-in function print(), to
compute the ”informal” or nicely printable string representation of an object. The return value must be a str
object.
Cette mé thode diffè re de object.__repr__() car il n’est pas attendu que __str__() renvoie une expres-
sion Python valide : une repré sentation plus agré able à lire ou plus concise peut ê tre utilisé e.
L’implé mentation par dé faut du type natif object appelle object.__repr__() .
object.__bytes__(self )
Called by bytes to compute a byte-string representation of an object. This should return a bytes object. The
object.__lt__(self, other)
object.__le__(self, other)
object.__eq__(self, other)
object.__ne__(self, other)
object.__gt__(self, other)
object.__ge__(self, other)
Ce sont les mé thodes dites de « comparaisons riches ». La correspondance entre les symboles opé rateurs et les
noms de mé thodes est la suivante : x<y appelle x.__lt__(y), x<=y appelle x.__le__(y), x==y appelle
x.__eq__(y), x!=y appelle x.__ne__(y), x>y appelle x.__gt__(y) et x>=y appelle x.__ge__(y).
A rich comparison method may return the singleton NotImplemented if it does not implement the operation
for a given pair of arguments. By convention, False and True are returned for a successful comparison.
However, these methods can return any value, so if the comparison operator is used in a Boolean context (e.g.,
in the condition of an if statement), Python will call bool() on the value to determine if the result is true or
false.
By default, object implements __eq__() by using is, returning NotImplemented in the case of a
false comparison : True if x is y else NotImplemented. For __ne__(), by default it delegates to
__eq__() and inverts the result unless it is NotImplemented. There are no other implied relationships
among the comparison operators or default implementations ; for example, the truth of (x<y or x==y) does
not imply x<=y. To automatically generate ordering operations from a single root operation, see functools.
total_ordering().
By default, the object class provides implementations consistent with Comparaisons de valeurs : equality
compares according to object identity, and order comparisons raise TypeError. Each default method may
generate these results directly, but may also return NotImplemented.
Lisez le paragraphe __hash__() pour connaître certaines notions importantes relatives à la cré ation d’objets
hachables qui acceptent les opé rations de comparaison personnalisé es et qui sont utilisables en tant que clé s
de dictionnaires.
There are no swapped-argument versions of these methods (to be used when the left argument does not sup-
port the operation but the right argument does) ; rather, __lt__() and __gt__() are each other’s reflection,
__le__() and __ge__() are each other’s reflection, and __eq__() and __ne__() are their own reflection.
If the operands are of different types, and the right operand’s type is a direct or indirect subclass of the left
operand’s type, the reflected method of the right operand has priority, otherwise the left operand’s method has
priority. Virtual subclassing is not considered.
When no appropriate method returns any value other than NotImplemented, the == and != operators will
fall back to is and is not, respectively.
object.__hash__(self )
Appelé e par la fonction native hash() et par les opé rations sur les membres de collections haché es (ce qui
comprend set, frozenset et dict). La mé thode __hash__() doit renvoyer un entier. La seule proprié té
requise est que les objets qui sont é gaux pour la comparaison doivent avoir la mê me valeur de hachage ; il est
conseillé de mé langer les valeurs de hachage des composants d’un objet qui jouent un rô le dans la comparaison
des objets, en les emballant dans un n-uplet dont on calcule l’empreinte. Par exemple :
def __hash__(self):
return hash(([Link], [Link], [Link]))
® Note
hash() limite la valeur renvoyé e d’un objet ayant une mé thode __hash__() personnalisé e à la taille d’un
Py_ssize_t. C’est classiquement 8 octets pour une implé mentation 64 bits et 4 octets sur une implé men-
tation 32 bits. Si la mé thode __hash__() d’un objet doit ê tre interopé rable sur des plateformes ayant
des implé mentations diffé rentes, assurez-vous de vé rifier la taille du hachage sur toutes les plateformes.
Une maniè re facile de le faire est la suivante : python -c "import sys; print(sys.hash_info.
width)".
If a class does not define an __eq__() method it should not define a __hash__() operation either ; if it
defines __eq__() but not __hash__(), its instances will not be usable as items in hashable collections. If a
class defines mutable objects and implements an __eq__() method, it should not implement __hash__(),
since the implementation of hashable collections requires that a key’s hash value is immutable (if the object’s
hash value changes, it will be in the wrong hash bucket).
User-defined classes have __eq__() and __hash__() methods by default (inherited from the object class) ;
with them, all objects compare unequal (except with themselves) and x.__hash__() returns an appropriate
value such that x == y implies both that x is y and hash(x) == hash(y).
Une classe qui surcharge __eq__() et qui ne dé finit pas __hash__() a sa mé thode __hash__() implici-
tement assigné e à None. Quand la mé thode __hash__() d’une classe est None, une instance de cette classe
lè ve TypeError quand un programme essaie de demander son empreinte et elle est correctement identifié e
comme non hachable quand on vé rifie isinstance(obj, [Link]).
Si une classe qui surcharge __eq__() a besoin de conserver l’implé mentation de __hash__() de la classe pa-
rente, vous devez l’indiquer explicitement à l’interpré teur en dé finissant __hash__ = <ClasseParente>.
__hash__.
Si une classe ne surcharge pas __eq__() et veut supprimer le calcul des empreintes, elle doit inclure
__hash__ = None dans la dé finition de la classe. Une classe qui dé finit sa propre mé thode __hash__()
qui lè ve explicitement TypeError serait incorrectement identifié e comme hachable par un appel à
isinstance(obj, [Link]).
® Note
par dé faut, les valeurs renvoyé es par __hash__() pour les chaînes et les bytes sont « salé es » avec une
valeur alé atoire non pré visible. Bien qu’une empreinte reste constante tout au long d’un processus Python,
sa valeur n’est pas pré visible entre deux invocations de Python.
This is intended to provide protection against a denial-of-service caused by carefully chosen inputs that
exploit the worst case performance of a dict insertion, O(n2 ) complexity. See [Link]
[Link] for details.
Modifier les empreintes obtenues par hachage modifie l’ordre d’ité ration sur les sets. Python n’a jamais
donné de garantie sur cet ordre (d’ailleurs, l’ordre n’est pas le mê me entre les implé mentations 32 et 64
bits).
Voir aussi PYTHONHASHSEED.
Modifié dans la version 3.3 : la randomisation des empreintes est activé e par dé faut.
object.__bool__(self )
Called to implement truth value testing and the built-in operation bool() ; should return False or True.
When this method is not defined, __len__() is called, if it is defined, and the object is considered true if its
result is nonzero. If a class defines neither __len__() nor __bool__() (which is true of the object class
itself), all its instances are considered true.
® Note
This method may still be bypassed when looking up special methods as the result of implicit invocation via
language syntax or built-in functions. See Recherche des méthodes spéciales.
Pour les accè s à certains attributs sensibles, lè ve un é vé nement d’audit object.__getattr__ avec les argu-
ments obj et name.
object.__setattr__(self, name, value)
Appelé e lors d’une assignation d’attribut. Elle est appelé e à la place du mé canisme normal (c’est-à -dire stocker
la valeur dans le dictionnaire de l’instance). name est le nom de l’attribut, value est la valeur à assigner à cet
attribut.
Si __setattr__() veut assigner un attribut d’instance, elle doit appeler la mé thode de la classe de base avec
le mê me nom, par exemple object.__setattr__(self, name, value).
Pour les assignations de certains attributs sensibles, lè ve un é vé nement d’audit object.__setattr__ avec
les arguments obj, name et value.
object.__delattr__(self, name)
Comme __setattr__() mais pour supprimer un attribut au lieu de l’assigner. Elle ne doit ê tre implé menté e
que si del [Link] a du sens pour cet objet.
Pour les suppressions de certains attributs sensibles, lè ve un é vé nement d’audit object.__deltattr__ avec
les arguments obj et name.
object.__dir__(self )
Called when dir() is called on the object. An iterable must be returned. dir() converts the returned iterable
to a list and sorts it.
Les noms spé ciaux __getattr__ et __dir__ peuvent aussi ê tre personnalisé s pour accé der aux attributs du module.
La fonction __getattr__ au niveau du module doit accepter un argument qui est un nom d’attribut et doit renvoyer
la valeur calculé e ou lever une AttributeError. Si un attribut n’est pas trouvé dans l’objet module en utilisant
la recherche normale, c’est-à -dire object.__getattribute__(), alors Python recherche __getattr__ dans le
__dict__ du module avant de lever une AttributeError. S’il la trouve, il l’appelle avec le nom de l’attribut et
renvoie le ré sultat.
The __dir__ function should accept no arguments, and return an iterable of strings that represents the names ac-
cessible on module. If present, this function overrides the standard dir() search on a module.
module.__class__
Pour une personnalisation plus fine du comportement d’un module (assignation des attributs, proprié té s, etc.), vous
pouvez assigner l’attribut __class__ d’un objet module à une sous-classe de [Link]. Par exemple :
import sys
from types import ModuleType
class VerboseModule(ModuleType):
def __repr__(self):
return f'Verbose {self.__name__}'
[Link][__name__].__class__ = VerboseModule
® Note
dé finir __getattr__ du module et __class__ pour le module impacte uniquement les recherches qui utilisent
la syntaxe d’accè s aux attributs — accé der directement aux globales d’un module (soit par le code dans le module,
soit via une ré fé rence au dictionnaire des variables globales du module) fonctionne toujours de la mê me façon.
Modifié dans la version 3.5 : l’attribut __class__ du module est maintenant en lecture-é criture.
Ajouté dans la version 3.7 : attributs __getattr__ et __dir__ du module.
µ Voir aussi
Implémentation de descripteurs
The following methods only apply when an instance of the class containing the method (a so-called descriptor class)
appears in an owner class (the descriptor must be in either the owner’s class dictionary or in the class dictionary for
one of its parents). In the examples below, ”the attribute” refers to the attribute whose name is the key of the property
in the owner class’ __dict__. The object class itself does not implement any of these protocols.
For instance bindings, the precedence of descriptor invocation depends on which descriptor methods are defined.
A descriptor can define any combination of __get__(), __set__() and __delete__(). If it does not define
__get__(), then accessing the attribute will return the descriptor object itself unless there is a value in the object’s
instance dictionary. If the descriptor defines __set__() and/or __delete__(), it is a data descriptor ; if it defines
neither, it is a non-data descriptor. Normally, data descriptors define both __get__() and __set__(), while non-
data descriptors have just the __get__() method. Data descriptors with __get__() and __set__() (and/or
__delete__()) defined always override a redefinition in an instance dictionary. In contrast, non-data descriptors
can be overridden by instances.
Les mé thodes Python (y compris celles dé coré es par @staticmethod et @classmethod) sont implé menté es
comme des descripteurs hors-donné es. De la mê me maniè re, les instances peuvent redé finir et surcharger les mé -
thodes. Ceci permet à chaque instance d’avoir un comportement qui diffè re des autres instances de la mê me classe.
La fonction property() est implé menté e en tant que descripteur de donné es. Ainsi, les instances ne peuvent pas
surcharger le comportement d’une proprié té .
classmethod object.__init_subclass__(cls)
Cette mé thode est appelé e quand la classe est sous-classé e. cls est alors la nouvelle sous-classe. Si elle est dé finie
en tant que mé thode d’instance normale, cette mé thode est implicitement convertie en mé thode de classe.
Keyword arguments which are given to a new class are passed to the parent class’s __init_subclass__.
For compatibility with other classes using __init_subclass__, one should take out the needed keyword
arguments and pass the others over to the base class, as in :
class Philosopher:
def __init_subclass__(cls, /, default_name, **kwargs):
super().__init_subclass__(**kwargs)
cls.default_name = default_name
L’implé mentation par dé faut de object.__init_subclass__ ne fait rien sans argument, mais lè ve une
erreur si elle est appelé e avec un argument ou plus.
® Note
l’indication de mé taclasse metaclass est absorbé e par le reste du mé canisme de types et n’est jamais pas-
sé e à l’implé mentation de __init_subclass__. La mé taclasse ré elle (plutô t que l’indication explicite)
peut ê tre ré cupé ré e par type(cls).
class A:
x = C() # Automatically calls: x.__set_name__(A, 'x')
Si l’affectation se produit aprè s la cré ation de la classe, le point d’entré e __set_name__() n’est pas appelé
automatiquement. Mais il est autorisé d’appeler __set_name__() manuellement :
class A:
pass
c = C()
A.x = c # The hook is not called
c.__set_name__(A, 'x') # Manually invoke the hook
Métaclasses
Par dé faut, les classes sont construites en utilisant type(). Le corps de la classe est exé cuté dans un nouvel espace
de nommage et le nom de la classe est lié localement au ré sultat de type(name, bases, namespace).
Le dé roulement de cré ation de la classe peut ê tre personnalisé en passant l’argument nommé metaclass dans la ligne
de dé finition de la classe ou en hé ritant d’une classe existante qui comporte dé jà un tel argument. Dans l’exemple qui
suit, MyClass et MySubclass sont des instances de Meta :
class Meta(type):
pass
class MyClass(metaclass=Meta):
pass
class MySubclass(MyClass):
pass
Tout autre argument nommé spé cifié dans la dé finition de la classe est passé aux opé rations de mé taclasses dé crites
auparavant.
Quand la dé finition d’une classe est exé cuté e, les diffé rentes é tapes suivies sont :
— les entré es MRO sont ré solues ;
— la mé taclasse approprié e est dé terminé e ;
— l’espace de nommage de la classe est pré paré ;
— le corps de la classe est exé cuté ;
— l’objet classe est cré é.
µ Voir aussi
types.resolve_bases()
Dynamically resolve bases that are not instances of type.
types.get_original_bases()
Retrieve a class’s ”original bases” prior to modifications by __mro_entries__().
PEP 560
Core support for typing module and generic types.
µ Voir aussi
µ Voir aussi
En particulier, la mé taclasse [Link] implé mente ces mé thodes pour autoriser l’ajout de classes de base abs-
traites (ABC pour Abstract Base Classes en anglais) en tant que « classes de base virtuelles » pour toute classe ou
type (y compris les types natifs).
type.__instancecheck__(self, instance)
Renvoie True si instance doit ê tre considé ré e comme une instance (directe ou indirecte) de class. Si elle est
dé finie, elle est appelé e pour implé menter isinstance(instance, class).
type.__subclasscheck__(self, subclass)
Renvoie True si subclass doit ê tre considé ré e comme une sous-classe (directe ou indirecte) de class. Si elle est
dé finie, appelé e pour implé menter issubclass(subclass, class).
Notez que ces mé thodes sont recherché es dans le type (la mé taclasse) d’une classe. Elles ne peuvent pas ê tre dé finies
en tant que mé thodes de classe dans la classe ré elle. C’est cohé rent avec la recherche des mé thodes spé ciales qui sont
appelé es pour les instances, sauf qu’ici l’instance est elle-mê me une classe.
µ Voir aussi
µ Voir aussi
Généralement, une classe ne peut ê tre paramé tré e que si elle dé finit une mé thode spé ciale de classe
__class_getitem__().
Intention de __class_getitem__
Le but de __class_getitem__() est de permettre la paramé trisation à l’exé cution des classes gé né riques de la
bibliothè que standard de façon à pouvoir appliquer plus facilement des annotations de type à ces classes.
Pour implé menter des classes gé né riques particularisé es pouvant ê tre paramé tré es à l’exé cution, et comprises
par les vé rificateurs statiques de type, vous pouvez soit hé riter d’une classe de la bibliothè que standard qui im-
plé mente dé jà __class_getitem__(), ou hé riter de [Link], qui a sa propre implé mentation de
__class_getitem__().
Les implé mentations particularisé es de __class_getitem__() sur des classes dé finies ailleurs que la biblio-
thè que standard peuvent ne pas ê tre comprises par des vé rificateurs de types tiers tels que mypy. L’utilisation de
__class_getitem__() pour tout autre objectif que l’annotation de type n’est pas conseillé e.
class_of_obj = type(obj)
En Python, toutes les classes sont des instances d’autres classes. La classe d’une classe est appelé e la métaclasse de la
classe et la plupart des classes ont la classe type comme mé taclasse. type ne dé finit pas __getitem__(), ce qui
veut dire que des expressions telles que list[int], dict[str, float] et tuple[str, bytes] aboutissent
toutes à l’appel de __class_getitem__() :
>>> # list has class "type" as its metaclass, like most classes:
>>> type(list)
<class 'type'>
>>> type(dict) == type(list) == type(tuple) == type(str) == type(bytes)
True
>>> # "list[int]" calls "list.__class_getitem__(int)"
>>> list[int]
list[int]
>>> # list.__class_getitem__ returns a GenericAlias object:
>>> type(list[int])
<class '[Link]'>
Cependant, si une classe a une mé taclasse particularisé e qui dé finit __getitem__(), l’indiçage de la classe peut
conduire à un comportement diffé rent. Un exemple peut ê tre trouvé dans le module enum :
µ Voir aussi
PEP 560 — Gestion de base pour les types modules et les types génériques
Introduction de __class_getitem__(), et pré sentation des cas où un indiçage conduit à l’appel de
__class_getitem__() au lieu de __getitem__()
methods append(), count(), index(), extend(), insert(), pop(), remove(), reverse() and sort(),
like Python standard list objects. Finally, sequence types should implement addition (meaning concatenation) and
multiplication (meaning repetition) by defining the methods __add__(), __radd__(), __iadd__(), __mul__(),
__rmul__() and __imul__() described below ; they should not define other numerical operators. It is recommen-
ded that both mappings and sequences implement the __contains__() method to allow efficient use of the in
operator ; for mappings, in should search the mapping’s keys ; for sequences, it should search through the values. It
is further recommended that both mappings and sequences implement the __iter__() method to allow efficient
iteration through the container ; for mappings, __iter__() should iterate through the object’s keys ; for sequences,
it should iterate through the values.
object.__len__(self )
Called to implement the built-in function len(). Should return the length of the object, an integer >= 0. Also,
an object that doesn’t define a __bool__() method and whose __len__() method returns zero is considered
to be false in a Boolean context.
Particularité de l’implémentation CPython : In CPython, the length is required to be at most [Link].
If the length is larger than [Link] some features (such as len()) may raise OverflowError. To
prevent raising OverflowError by truth value testing, an object must define a __bool__() method.
object.__length_hint__(self )
Called to implement operator.length_hint(). Should return an estimated length for the object (which
may be greater or less than the actual length). The length must be an integer >= 0. The return value may also
be NotImplemented, which is treated the same as if the __length_hint__ method didn’t exist at all. This
method is purely an optimization and is never required for correctness.
Ajouté dans la version 3.4.
® Note
le dé coupage est effectué uniquement à l’aide des trois mé thodes suivantes. Un appel comme
a[1:2] = b
est traduit en
a[slice(1, 2, None)] = b
et ainsi de suite. Les é lé ments manquants sont remplacé s par None.
object.__getitem__(self, key)
Called to implement evaluation of self[key]. For sequence types, the accepted keys should be integers.
Optionally, they may support slice objects as well. Negative index support is also optional. If key is of an
inappropriate type, TypeError may be raised ; if key is a value outside the set of indexes for the sequence
(after any special interpretation of negative values), IndexError should be raised. For mapping types, if key
is missing (not in the container), KeyError should be raised.
® Note
for s’attend à ce qu’une IndexError soit levé e en cas d’indice illé gal afin de dé tecter correctement la fin
de la sé quence.
® Note
quand on vous spécifiez un indice pour une classe, la mé thode de classe spé ciale __class_getitem__()
peut ê tre appelé e au lieu de __getitem__(). Reportez-vous à __class_getitem__ contre __getitem__ pour
plus de dé tails.
Appelé e pour implé menter l’assignation à self[key]. La mê me note que pour __getitem__() s’applique.
Elle ne doit ê tre implé menté e que pour les tableaux de correspondances qui autorisent les modifications de
valeurs des clé s, ceux pour lesquels on peut ajouter de nouvelles clé s ou, pour les sé quences, celles dont les
é lé ments peuvent ê tre remplacé s. Les mê mes exceptions que pour la mé thode __getitem__() doivent ê tre
levé es en cas de mauvaises valeurs de clé s.
object.__delitem__(self, key)
Appelé e pour implé menter la suppression de self[key]. La mê me note que pour __getitem__() s’ap-
plique. Elle ne doit ê tre implé menté e que pour les tableaux de correspondances qui autorisent les suppressions
de clé s ou pour les sé quences dont les é lé ments peuvent ê tre supprimé s de la sé quence. Les mê mes exceptions
que pour la mé thode __getitem__() doivent ê tre levé es en cas de mauvaises valeurs de clé s.
object.__missing__(self, key)
Appelé e par dict.__getitem__() pour implé menter self[key] dans les sous-classes de dictionnaires
lorsque la clé n’est pas dans le dictionnaire.
object.__iter__(self )
Cette mé thode est appelé e quand un itérateur est requis pour un conteneur. Cette mé thode doit renvoyer un
nouvel objet ité rateur qui peut ité rer sur tous les objets du conteneur. Pour les tableaux de correspondances,
elle doit ité rer sur les clé s du conteneur.
object.__reversed__(self )
Appelé e (si elle existe) par la fonction native reversed() pour implé menter l’ité ration en sens inverse. Elle
doit renvoyer un nouvel objet ité rateur qui itè re sur tous les objets du conteneur en sens inverse.
Si la mé thode __reversed__() n’est pas fournie, la fonction native reversed() se replie sur le protocole de
sé quence (__len__() et __getitem__()). Les objets qui connaissent le protocole de sé quence ne doivent
fournir __reversed__() que si l’implé mentation qu’ils proposent est plus efficace que celle de reversed().
Les opé rateurs de tests d’appartenance (in et not in) sont normalement implé menté s comme des ité rations sur un
conteneur. Cependant, les objets conteneurs peuvent fournir les mé thodes spé ciales suivantes avec une implé menta-
tion plus efficace, qui ne requiè rent d’ailleurs pas que l’objet soit ité rable.
object.__contains__(self, item)
Appelé e pour implé menter les opé rateurs de test d’appartenance. Elle doit renvoyer True si item est dans self et
False sinon. Pour les tableaux de correspondances, seules les clé s sont considé ré es (pas les valeurs des paires
clé s-valeurs).
Pour les objets qui ne dé finissent pas __contains__(), les tests d’appartenance essaient d’abord d’ité rer avec
__iter__() puis avec le vieux protocole d’ité ration sur les sé quences via __getitem__(), reportez-vous à
cette section dans la référence du langage.
object.__rshift__(self, other)
object.__and__(self, other)
object.__xor__(self, other)
object.__or__(self, other)
Ces mé thodes sont appelé es pour implé menter les opé rations arithmé tiques binaires (+, -, *, @, /, //, %,
divmod(), pow(), **, <<, >>, &, ^, |). Par exemple, pour é valuer l’expression x + y, où x est une instance
d’une classe qui possè de une mé thode __add__(), type(x).__add__(x, y) est appelé e. La mé thode
__divmod__() doit ê tre l’é quivalent d’appeler __floordiv__() et __mod__() ; elle ne doit pas ê tre relié e
à __truediv__(). Notez que __pow__() doit ê tre dé finie de maniè re à accepter un troisiè me argument
optionnel si la version ternaire de la fonction native pow() est autorisé e.
If one of those methods does not support the operation with the supplied arguments, it should return
NotImplemented.
object.__radd__(self, other)
object.__rsub__(self, other)
object.__rmul__(self, other)
object.__rmatmul__(self, other)
object.__rtruediv__(self, other)
object.__rfloordiv__(self, other)
object.__rmod__(self, other)
object.__rdivmod__(self, other)
object.__rpow__(self, other , modulo ) [ ]
object.__rlshift__(self, other)
object.__rrshift__(self, other)
object.__rand__(self, other)
object.__rxor__(self, other)
object.__ror__(self, other)
These methods are called to implement the binary arithmetic operations (+, -, *, @, /, //, %, divmod(),
pow(), **, <<, >>, &, ^, |) with reflected (swapped) operands. These functions are only called if the left
operand does not support the corresponding operation 3 and the operands are of different types. 4 For instance,
to evaluate the expression x - y, where y is an instance of a class that has an __rsub__() method, type(y).
__rsub__(y, x) is called if type(x).__sub__(x, y) returns NotImplemented.
Notez que la fonction ternaire pow() n’essaie pas d’appeler __rpow__() (les rè gles de coercition seraient trop
compliqué es).
® Note
si le type de l’opé rande de droite est une sous-classe du type de l’opé rande de gauche et que cette sous-
classe fournit une implé mentation diffé rente de la mé thode symé trique pour l’opé ration, cette mé thode est
appelé e avant la mé thode originelle de l’opé rande gauche. Ce comportement permet à des sous-classes de
surcharger les opé rations de leurs ancê tres.
object.__iadd__(self, other)
object.__isub__(self, other)
object.__imul__(self, other)
object.__imatmul__(self, other)
object.__itruediv__(self, other)
3. ”Does not support” here means that the class has no such method, or the method returns NotImplemented. Do not set the method to
None if you want to force fallback to the right operand’s reflected method—that will instead have the opposite effect of explicitly blocking such
fallback.
4. Pour des opé randes de mê me type, on considè re que si la mé thode originelle (telle que __add__()) é choue, alors l’opé ration en tant que
telle n’est pas autorisé e et donc la mé thode symé trique n’est pas appelé e.
object.__ifloordiv__(self, other)
object.__imod__(self, other)
[
object.__ipow__(self, other , modulo ) ]
object.__ilshift__(self, other)
object.__irshift__(self, other)
object.__iand__(self, other)
object.__ixor__(self, other)
object.__ior__(self, other)
These methods are called to implement the augmented arithmetic assignments (+=, -=, *=, @=, /=, //=, %=,
**=, <<=, >>=, &=, ^=, |=). These methods should attempt to do the operation in-place (modifying self) and
return the result (which could be, but does not have to be, self). If a specific method is not defined, or if that
method returns NotImplemented, the augmented assignment falls back to the normal methods. For instance,
if x is an instance of a class with an __iadd__() method, x += y is equivalent to x = x.__iadd__(y)
. If __iadd__() does not exist, or if x.__iadd__(y) returns NotImplemented, x.__add__(y) and y.
__radd__(x) are considered, as with the evaluation of x + y. In certain situations, augmented assignment
can result in unexpected errors (see faq-augmented-assignment-tuple-error), but this behavior is in fact part of
the data model.
object.__neg__(self )
object.__pos__(self )
object.__abs__(self )
object.__invert__(self )
Appelé es pour implé menter les opé rations arithmé tiques unaires (-, +, abs() et ~).
object.__complex__(self )
object.__int__(self )
object.__float__(self )
Appelé es pour implé menter les fonctions natives complex(), int() et float(). Elles doivent renvoyer une
valeur du type approprié .
object.__index__(self )
Appelé e pour implé menter [Link]() et lorsque Python a besoin de convertir sans perte un objet
numé rique en objet entier (pour un dé coupage ou dans les fonctions natives bin(), hex() et oct()). La
pré sence de cette mé thode indique que l’objet numé rique est un type entier. Elle doit renvoyer un entier.
Si __int__(), __float__() et __complex__() ne sont pas dé finies, alors les fonctions natives int(),
float() et complex() redirigent par dé faut vers __index__().
[
object.__round__(self , ndigits ) ]
object.__trunc__(self )
object.__floor__(self )
object.__ceil__(self )
Appelé es pour implé menter la fonction native round() et les fonctions du module math trunc(), floor()
et ceil(). À moins que ndigits ne soit passé à __round__(), toutes ces mé thodes doivent renvoyer la valeur
de l’objet tronqué e pour donner un Integral (typiquement un int).
La fonction native int() se replie sur __trunc__() dans le cas où ni __int__() ni __index__() ne sont
dé finies.
Modifié dans la version 3.11 : la dé lé gation de int() vers __trunc__() est obsolè te.
Les utilisations classiques des gestionnaires de contexte sont la sauvegarde et la restauration d’é tats divers, le ver-
rouillage et le dé verrouillage de ressources, la fermeture de fichiers ouverts, etc.
For more information on context managers, see typecontextmanager. The object class itself does not provide the
context manager methods.
object.__enter__(self )
Entre dans le contexte d’exé cution relatif à cet objet. L’instruction with lie la valeur de retour de cette mé thode
à une (ou plusieurs) cible spé cifié e par la clause as de l’instruction, si elle est spé cifié e.
object.__exit__(self, exc_type, exc_value, traceback)
Sort du contexte d’exé cution relatif à cet objet. Les paramè tres dé crivent l’exception qui a causé la sortie du
contexte. Si l’on sort du contexte sans exception, les trois arguments sont à None.
Si une exception est indiqué e et que la mé thode souhaite supprimer l’exception (c’est-à -dire qu’elle ne veut pas
que l’exception soit propagé e), elle doit renvoyer True. Sinon, l’exception est traité e normalement à la sortie
de cette mé thode.
Note that __exit__() methods should not reraise the passed-in exception ; this is the caller’s responsibility.
µ Voir aussi
3.3.10 Arguments positionnels dans le filtrage par motif sur les classes
When using a class name in a pattern, positional arguments in the pattern are not allowed by default, i.e. case
MyClass(x, y) is typically invalid without special support in MyClass. To be able to use that kind of pattern, the
class needs to define a __match_args__ attribute.
object.__match_args__
Cet attribut de la classe est un n-uplet de chaînes. Lorsque la classe apparaît dans un filtre avec des arguments
positionnels, ils sont convertis en arguments nommé s avec les noms du n-uplet, dans l’ordre. Si l’attribut n’est
pas dé fini, tout se passe comme si sa valeur é tait le n-uplet vide ().
Ainsi, si UneClasse.__match_args__ est mis à ("gauche", "milieu", "droite"), le filtre case
UneClasse(x, y) est é quivalent à case UneClasse(gauche=x, milieu=y). Le filtre doit comporter au
maximum autant d’arguments positionnels que la longueur __match_args__. Dans le cas contraire, le filtrage lè ve
l’exception TypeError.
Ajouté dans la version 3.10.
µ Voir aussi
is an integer representing the kind of buffer requested, affecting for example whether the returned buffer is read-
only or writable. [Link] provides a convenient way to interpret the flags. The method must
return a memoryview object.
object.__release_buffer__(self, buffer)
Called when a buffer is no longer needed. The buffer argument is a memoryview object that was previously
returned by __buffer__(). The method must release any resources associated with the buffer. This method
should return None. Buffer objects that do not need to perform any cleanup are not required to implement this
method.
Ajouté dans la version 3.12.
µ Voir aussi
>>> class C:
... pass
...
>>> c = C()
>>> c.__len__ = lambda: 5
>>> len(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'C' has no len()
La raison de ce comportement vient de certaines mé thodes spé ciales telles que __hash__() et __repr__() qui
sont implé menté es par tous les objets, y compris les objets types. Si la recherche effectué e par ces mé thodes utilisait
le processus normal de recherche, elles ne fonctionneraient pas si on les appelait sur l’objet type lui-mê me :
Essayer d’invoquer une mé thode non lié e d’une classe de cette maniè re est parfois appelé « confusion de mé taclasse »
et se contourne en shuntant l’instance lors de la recherche des mé thodes spé ciales :
En plus de shunter les attributs des instances pour fonctionner correctement, la recherche des mé thodes spé ciales
implicites shunte aussi la mé thode __getattribute__() mê me dans la mé taclasse de l’objet :
En shuntant le mé canisme de __getattribute__() de cette façon, cela permet d’optimiser la vitesse de l’interpré -
teur moyennant une certaine manœuvre dans la gestion des mé thodes spé ciales (la mé thode spé ciale doit ê tre dé finie
sur l’objet classe lui-mê me afin d’ê tre invoqué e de maniè re cohé rente par l’interpré teur).
3.4 Coroutines
3.4.1 Objets attendables (awaitable)
Un objet awaitable implé mente gé né ralement une mé thode __await__(). Les objets coroutine renvoyé s par les
fonctions async def sont des attendables (awaitable).
® Note
les objets itérateur de générateur renvoyé s par les gé né rateurs dé coré s par [Link]() sont aussi des
attendables (awaitable), mais ils n’implé mentent pas __await__().
object.__await__(self )
Must return an iterator. Should be used to implement awaitable objects. For instance, [Link]
implements this method to be compatible with the await expression. The object class itself is not awaitable
and does not provide this method.
® Note
The language doesn’t place any restriction on the type or value of the objects yielded by the iterator returned
by __await__, as this is specific to the implementation of the asynchronous execution framework (e.g.
asyncio) that will be managing the awaitable object.
µ Voir aussi
PEP 492 pour les informations relatives aux objets attendables (awaitable).
3.4. Coroutines 55
The Python Language Reference, Version 3.13.7
class Reader:
async def readline(self):
...
class AsyncContextManager:
async def __aenter__(self):
await log('entering context')
3.4. Coroutines 57
The Python Language Reference, Version 3.13.7
Modèle d’exécution
Un bloc de code est exé cuté dans un cadre d’exécution. Un cadre contient des informations administratives (utilisé es
pour le dé bogage) et dé termine où et comment l’exé cution se poursuit aprè s la fin de l’exé cution du bloc de code.
59
The Python Language Reference, Version 3.13.7
Une cible qui apparaît dans une instruction del est aussi considé ré e comme une liaison à un nom dans ce cadre (bien
que la sé mantique vé ritable soit de dé lier le nom).
Chaque affectation ou instruction import a lieu dans un bloc dé fini par une dé finition de classe ou de fonction, ou au
niveau du module (le bloc de code de plus haut niveau).
If a name is bound in a block, it is a local variable of that block, unless declared as nonlocal or global. If a name
is bound at the module level, it is a global variable. (The variables of the module code block are local and global.) If
a variable is used in a code block but not defined there, it is a free variable.
Chaque occurrence d’un nom dans un programme fait ré fé rence à la liaison de ce nom é tablie par les rè gles de
ré solution des noms suivantes.
class A:
a = 42
b = list(a + i for i in range(10))
class A:
type Alias = Nested
class Nested: pass
Here the exception is raised only when the __value__ attribute of the type alias or the __bound__ attribute of the
type variable is accessed.
This behavior is primarily useful for references to types that have not yet been defined when the type alias or type
variable is created. For example, lazy evaluation enables creation of mutually recursive type aliases :
Lazily evaluated values are evaluated in annotation scope, which means that names that appear inside the lazily
evaluated value are looked up as if they were used in the immediately enclosing scope.
Ajouté dans la version 3.12.
L’espace de nommage natif associé à l’exé cution d’un bloc de code est effectivement trouvé en cherchant le nom
__builtins__ dans l’espace de nommage globaux ; ce doit ê tre un dictionnaire ou un module (dans ce dernier cas,
le dictionnaire du module est utilisé ). Par dé faut, lorsque l’on se trouve dans le module __main__, __builtins__
est le module natif builtins ; lorsque l’on se trouve dans tout autre module, __builtins__ est un pseudonyme
du dictionnaire du module builtins lui-mê me.
i = 10
def f():
print(i)
i = 42
f()
Les fonctions eval() et exec() n’ont pas accè s à l’environnement complet pour ré soudre les noms. Les noms
doivent ê tre ré solus dans les espaces de nommage locaux et globaux de l’appelant. Les variables libres ne sont pas
ré solues dans l’espace de nommage englobant le plus proche mais dans l’espace de nommage globaux 1 . Les fonctions
eval() et exec() possè dent des arguments optionnels pour surcharger les espaces de nommage globaux et locaux.
Si seulement un espace de nommage est spé cifié , il est utilisé pour les deux.
4.3 Exceptions
Les exceptions sont un moyen de sortir du flot normal d’exé cution d’un bloc de code de maniè re à gé rer des erreurs
ou des conditions exceptionnelles. Une exception est levée au moment où l’erreur est dé tecté e ; elle doit ê tre gérée par
le bloc de code qui l’entoure ou par tout bloc de code qui a, directement ou indirectement, invoqué le bloc de code
où l’erreur s’est produite.
1. En effet, le code qui est exé cuté par ces opé rations n’est pas connu au moment où le module est compilé .
L’interpré teur Python lè ve une exception quand il dé tecte une erreur à l’exé cution (telle qu’une division par zé ro). Un
programme Python peut aussi lever explicitement une exception avec l’instruction raise. Les gestionnaires d’ex-
ception sont spé cifié s avec l’instruction try … except. La clause finally d’une telle instruction peut ê tre utilisé e
pour spé cifier un code de nettoyage qui ne gè re pas l’exception mais qui est exé cuté quoi qu’il arrive (exception ou
pas).
Python utilise le modè le par terminaison de gestion des erreurs : un gestionnaire d’exception peut trouver ce qui est
arrivé et continuer l’exé cution à un niveau plus é levé , mais il ne peut pas ré parer l’origine de l’erreur et ré -essayer
l’opé ration qui a é choué (sauf à entrer à nouveau dans le code en question par le haut).
Quand une exception n’est pas du tout gé ré e, l’interpré teur termine l’exé cution du programme ou retourne à la boucle
interactive. Dans ces cas, il affiche une trace de la pile d’appels, sauf si l’exception est SystemExit.
Les exceptions sont identifié es par des instances de classe. La clause except sé lectionné e dé pend de la classe de
l’instance : elle doit faire ré fé rence à la classe de l’instance ou à une de ses classes ancêtres non virtuelles. L’instance peut
ê tre transmise au gestionnaire et peut apporter des informations complé mentaires sur les conditions de l’exception.
® Note
Les messages d’exception ne font pas partie de l’API Python. Leur contenu peut changer d’une version de Python
à une autre sans avertissement et le code ne doit pas reposer sur ceux-ci s’il doit fonctionner sur plusieurs versions
de l’interpré teur.
Reportez-vous aussi aux descriptions de l’instruction try dans la section L’instruction try et de l’instruction raise
dans la section L’instruction raise.
Notes
4.3. Exceptions 63
The Python Language Reference, Version 3.13.7
Le système d’importation
Le code Python d’un module peut accé der à du code d’un autre module par un mé canisme qui consiste à importer cet
autre module. L’instruction import est la façon la plus courante de faire appel à ce systè me d’importation, mais ce
n’est pas la seule. Les fonctions telles que importlib.import_module() et __import__() peuvent aussi ê tre
utilisé es pour mettre en œuvre le mé canisme d’importation.
L’instruction import effectue deux opé rations ; elle cherche le module dont le nom a é té donné puis elle lie le ré sultat
de cette recherche à un nom dans la porté e locale. L’opé ration de recherche de l’instruction import consiste à appeler
la fonction __import__() avec les arguments adé quats. La valeur renvoyé e par __import__() est utilisé e pour
effectuer l’opé ration de liaison avec le nom fourni à l’instruction import. Reportez-vous à l’instruction import pour
les dé tails exacts de l’opé ration de liaison avec le nom.
Un appel direct à __import__() effectue seulement la recherche du module et, s’il est trouvé , l’opé ration de cré ation
du module. Bien que des effets collaté raux puissent se produire, tels que l’importation de paquets parents et la mise
à jour de divers caches (y compris [Link]), il n’y a que l’instruction import qui dé clenche l’opé ration de
liaison avec le nom.
Quand une instruction import est exé cuté e, la fonction native __import__() est appelé e. D’autres mé ca-
nismes d’appel au systè me d’importation (tels que importlib.import_module()) peuvent choisir d’ignorer
__import__() et utiliser leurs propres solutions pour implé menter la sé mantique d’importation.
Quand un module est importé pour la premiè re fois, Python recherche le module et, s’il est trouvé , cré e un objet
module 1 en l’initialisant. Si le module n’est pas trouvé , une ModuleNotFoundError est levé e. Python implé mente
plusieurs straté gies pour rechercher le module d’un nom donné quand le mé canisme d’importation est invoqué . Ces
straté gies peuvent ê tre modifié es et é tendues par divers moyens dé crits dans les sections suivantes.
Modifié dans la version 3.3 : le systè me d’importation a é té mis à jour pour implé menter complè tement la deuxiè me
partie de la PEP 302. Il n’existe plus de mé canisme implicite d’importation (le systè me d’importation complet est
exposé via sys.meta_path). En complé ment, la gestion des paquets dans l’espace des noms natif a é té implé menté e
(voir la PEP 420).
5.1 importlib
Le module importlib fournit une API riche pour interagir avec le systè me d’importation. Par exemple,
importlib.import_module() fournit une API (que nous vous recommandons) plus simple que la fonction na-
tive __import__() pour mettre en œuvre le mé canisme d’importation. Reportez-vous à la documentation de la
bibliothè que importlib pour obtenir davantage de dé tails.
1. Voir [Link].
65
The Python Language Reference, Version 3.13.7
parent/
__init__.py
one/
__init__.py
two/
__init__.py
three/
__init__.py
5.3 Recherche
Pour commencer la recherche, Python a besoin du nom qualifié du module (ou du paquet, mais ici cela ne fait pas
de diffé rence) que vous souhaitez importer. Le nom peut ê tre donné en argument à l’instruction import ou comme
paramè tre aux fonctions importlib.import_module() ou __import__().
Le nom est utilisé dans plusieurs phases de la recherche et peut ê tre un chemin sé paré par des points pour un
sous-module, par exemple [Link]. Dans ce cas, Python essaie d’abord d’importer truc puis
[Link] et enfin [Link]. Si n’importe laquelle des importations intermé diaires é choue, une
ModuleNotFoundError est levé e.
5.3. Recherche 67
The Python Language Reference, Version 3.13.7
5.3.4 Méta-chemins
Quand le module demandé n’est pas trouvé dans [Link], Python recherche alors dans sys.meta_path qui
contient une liste d’objets chercheurs dans des mé ta-chemins. Ces chercheurs sont interrogé s dans l’ordre pour voir
s’ils savent prendre en charge le module passé en paramè tre. Les chercheurs dans les mé ta-chemins implé mentent
une mé thode find_spec() qui prend trois arguments : un nom, un chemin d’importation et (optionnellement) un
module cible. Un chercheur dans les mé ta-chemins peut utiliser n’importe quelle straté gie pour dé terminer s’il est
apte à prendre en charge le module.
Si un chercheur dans les mé ta-chemins sait prendre en charge le module donné , il renvoie un objet spé cificateur. S’il
ne sait pas, il renvoie None. Si le traitement de sys.meta_path arrive à la fin de la liste sans qu’aucun chercheur
n’a renvoyé un objet spé cificateur, alors une ModuleNotFoundError est levé e. Toute autre exception levé e est
simplement propagé e à l’appelant, mettant fin au processus d’importation.
La mé thode find_spec() des chercheurs dans les mé ta-chemins est appelé e avec deux ou trois arguments. Le pre-
mier est le nom complè tement qualifié du module à importer, par exemple [Link]. Le deuxiè me
argument est l’ensemble des chemins dans lesquels chercher. Pour les modules de plus haut niveau, le deuxiè me argu-
ment est None mais pour les sous-modules ou les paquets, le deuxiè me argument est la valeur de l’attribut __path__
du paquet parent. Si l’attribut __path__ approprié n’est pas accessible, une ModuleNotFoundError est levé e. Le
troisiè me argument est un objet module existant qui va ê tre la cible du chargement (plus tard). Le systè me d’impor-
tation ne passe le module cible en paramè tre que lors d’un rechargement.
Le mé ta-chemin peut ê tre parcouru plusieurs fois pour une seule requê te d’importation. Par exemple, si nous
supposons qu’aucun des modules concerné s n’a dé jà é té mis en cache, importer [Link] effec-
tue une premiè re importation au niveau le plus haut, en appelant c_m_c.find_spec("truc", None, None)
pour chaque chercheur dans les mé ta-chemins (c_m_c). Aprè s que truc a é té importé , [Link] est im-
porté en parcourant le mé ta-chemin une deuxiè me fois, appelant c_m_c.find_spec("[Link]", truc.
__path__, None). Une fois [Link] importé , le parcours final appelle c_m_c.find_spec("truc.
[Link]", [Link].__path__, None).
Quelques chercheurs dans les mé ta-chemins ne gè rent que les importations de plus haut niveau. Ces importateurs
renvoient toujours None si on leur passe un deuxiè me argument autre que None.
Le sys.meta_path de Python comprend trois chercheurs par dé faut : un qui sait importer les modules natifs, un
qui sait importer les modules figé s et un qui sait importer les modules depuis un chemin des importations (c’est le
chercheur dans path).
Modifié dans la version 3.4 : La mé thode find_spec() des chercheurs dans les mé ta-chemins a remplacé
find_module(), devenue obsolè te. Bien qu’elle continue de fonctionner comme avant, le mé canisme d’importation
essaie find_module() uniquement si le chercheur n’implé mente pas find_spec().
Modifié dans la version 3.10 : L’utilisation de find_module() par le systè me d’importation lè ve maintenant un
ImportWarning.
Modifié dans la version 3.12 : find_module() a é té supprimé . Utiliser find_spec() à la place.
5.4 Chargement
Quand un spé cificateur de module est trouvé , le mé canisme d’importation l’utilise (et le chargeur qu’il contient) pour
charger le module. Voici à peu prè s ce qui se passe au sein de l’importation pendant la phase de chargement :
module = None
if [Link] is not None and hasattr([Link], 'create_module'):
# It is assumed 'exec_module' will also be defined on the loader.
module = [Link].create_module(spec)
if module is None:
module = ModuleType([Link])
# The import-related module attributes get set here:
_init_module_attrs(spec, module)
if [Link] is None:
# unsupported
raise ImportError
if [Link] is None and spec.submodule_search_locations is not None:
# namespace package
[Link][[Link]] = module
elif not hasattr([Link], 'exec_module'):
module = [Link].load_module([Link])
else:
[Link][[Link]] = module
try:
[Link].exec_module(module)
except BaseException:
try:
del [Link][[Link]]
except KeyError:
pass
raise
return [Link][[Link]]
5.4. Chargement 69
The Python Language Reference, Version 3.13.7
5.4.1 Chargeurs
Les chargeurs de modules fournissent la fonction critique du chargement : l’exé cution du module. Le mé canisme
d’importation appelle la mé thode [Link].exec_module() avec un unique argument, l’objet
module à exé cuter. Toute valeur renvoyé e par exec_module() est ignoré e.
Les chargeurs doivent satisfaire les conditions suivantes :
— Si le module est un module Python (par opposition aux modules natifs ou aux extensions chargé es dynami-
quement), le chargeur doit exé cuter le code du module dans l’espace des noms globaux du module (module.
__dict__).
— Si le chargeur ne peut pas exé cuter le module, il doit lever une ImportError, alors que toute autre exception
levé e durant exec_module() est propagé e.
Souvent, le chercheur et le chargeur sont le mê me objet ; dans ce cas, la mé thode find_spec() doit juste renvoyer
un spé cificateur avec le chargeur dé fini à self.
Les chargeurs de modules peuvent choisir de cré er l’objet module pendant le chargement en implé mentant une mé -
thode create_module(). Elle prend un argument, l’objet spé cificateur du module et renvoie le nouvel objet du
module à utiliser pendant le chargement. Notez que create_module() n’a besoin de dé finir aucun attribut sur
l’objet module. Si cette mé thode renvoie None, le mé canisme d’importation cré e le nouveau module lui-mê me.
Ajouté dans la version 3.4 : la mé thode create_module() des chargeurs.
Modifié dans la version 3.4 : la mé thode load_module() a é té remplacé e par exec_module() et le mé canisme
d’import assume toutes les responsabilité s du chargement.
Par compatibilité avec les chargeurs existants, le mé canisme d’importation utilise la mé thode load_module() des
chargeurs si elle existe et si le chargeur n’implé mente pas exec_module(). Cependant, load_module() est dé -
claré e obsolè te et les chargeurs doivent implé menter exec_module() à la place.
La mé thode load_module() doit implé menter toutes les fonctionnalité s de chargement dé crites ci-dessus en plus
de l’exé cution du module. Toutes les contraintes s’appliquent aussi, avec quelques pré cisions supplé mentaires :
— S’il y a un objet module existant avec le mê me nom dans [Link], le chargeur doit utiliser le module
existant (sinon, [Link]() ne fonctionnera pas correctement). Si le module considé ré n’est pas
trouvé dans [Link], le chargeur doit cré er un nouvel objet module et l’ajouter à [Link].
— Le module doit exister dans [Link] avant que le chargeur n’exé cute le code du module, afin d’é viter
les ré cursions infinies ou le chargement multiple.
— Si le chargement é choue, le chargeur ne doit enlever de [Link] que le (ou les) module ayant é choué
et seulement si le chargeur lui-mê me a chargé le module explicitement.
Modifié dans la version 3.5 : un avertissement DeprecationWarning est levé quand exec_module() est dé finie
mais create_module() ne l’est pas.
Modifié dans la version 3.6 : une exception ImportError est levé e quand exec_module() est dé finie mais
create_module() ne l’est pas.
5.4.2 Sous-modules
Quand un sous-module est chargé , quel que soit le mé canisme (par exemple avec les instructions import,
import-from ou avec la fonction native __import__()), une liaison est cré ée dans l’espace de nommage du mo-
dule parent vers l’objet sous-module. Par exemple, si le paquet spam possè de un sous-module foo, aprè s l’importation
de [Link], spam possè de un attribut foo qui est lié au sous-module. Supposons que nous ayons l’arborescence
suivante :
spam/
__init__.py
[Link]
alors exé cuter les lignes suivantes cré e des liens vers foo et Foo dans le module spam :
Connaissant la façon habituelle dont Python effectue les liens, cela peut sembler surprenant. Mais c’est en fait une
fonctionnalité fondamentale du systè me d’importation. Si vous avez quelque part [Link]['spam'] et sys.
modules['[Link]'] (comme dans c’est le cas ci-dessus aprè s l’importation), alors le dernier doit apparaître
comme l’attribut foo du premier.
5.4. Chargement 71
The Python Language Reference, Version 3.13.7
— Si le module possè de un attribut __file__, il est utilisé pour construire la repré sentation du module.
— Si le module ne possè de pas d’attribut __file__ mais possè de un __loader__ qui n’est pas None, alors la
repré sentation du chargeur est utilisé e pour construire la repré sentation du module.
— Sinon, il utilise juste le __name__ du module dans la repré sentation.
Modifié dans la version 3.12 : La mé thode module_repr() est obsolè te depuis Python 3.4, et a é té supprimé e en
Python 3.12 et n’est donc plus appelé e lors de la ré solution du __repr__() d’un module.
S’il convient juste de modifier le comportement de l’instruction import sans affecter les autres API qui utilisent le
systè me d’importation, alors remplacer la fonction native __import__() peut ê tre suffisant. Cette technique peut
aussi ê tre employé e au niveau d’un module pour n’alté rer le comportement des importations qu’à l’inté rieur de ce
module.
Pour empê cher sé lectivement l’importation de certains modules par un point d’entré e placé en tê te dans
le mé ta-chemin (plutô t que de dé sactiver complè tement le systè me d’importation), il suffit de lever une
ModuleNotFoundError directement depuis find_spec() au lieu de renvoyer None. En effet, ce dernier indique
que la recherche dans le mé ta-chemin peut continuer alors que la levé e de l’exception termine immé diatement la
recherche.
package/
__init__.py
subpackage1/
__init__.py
[Link]
[Link]
subpackage2/
__init__.py
[Link]
[Link]
Les importations absolues peuvent utiliser soit la syntaxe import <>, soit from <> import <>, mais les impor-
tations relatives doivent seulement utiliser la deuxiè me forme, la raison é tant :
import [Link]
doit exposer [Link] comme une expression utilisable, mais .moduleY n’est pas une expression valide.
5.8.1 __main__.__spec__
En fonction de la maniè re dont __main__ est initialisé , __main__.__spec__ est dé fini de maniè re conforme ou
mis à None.
Quand Python est dé marré avec l’option -m, __spec__ est dé fini à la valeur du spé cificateur du module ou paquet
correspondant. Python peuple aussi __spec__ quand le module __main__ est chargé en tant que partie de l’exé cution
d’un ré pertoire, d’un fichier zip ou d’une entré e de [Link].
Dans les autres cas, __main__.__spec__ est mis à None, car le code qui peuple __main__ ne trouve pas de
correspondance directe avec un module que l’on importe :
— invite de commande interactive
— l’option -c
— lecture depuis l’entré e standard
— lecture depuis un fichier de code source ou de bytecode
Notez que __main__.__spec__ vaut toujours None dans le dernier cas, même si le fichier pourrait techniquement
ê tre importé directement en tant que module. Utilisez l’option -m si vous souhaitez disposer de mé tadonné es valides
du module dans __main__.
Notez aussi que mê me quand __main__ correspond à un module importable et que __main__.__spec__ est dé fini
en consé quence, ils seront toujours considé ré s comme des modules distincts. Cela est dû au fait que le bloc encadré par
if __name__ == "__main__": ne s’exé cute que quand le module est utilisé pour peupler l’espace de nommage
de __main__, et pas durant une importation normale.
5.9 Références
Le mé canisme d’importation a considé rablement é volué depuis les dé buts de Python. La spé cification des paquets
originale est toujours disponible, bien que quelques dé tails ont changé depuis l’é criture de ce document.
La spé cification originale de sys.meta_path se trouve dans la PEP 302. La PEP 420 contient des extensions
significatives.
La PEP 420 a introduit les paquets-espaces de nommage pour Python 3.3. La PEP 420 a aussi introduit le protocole
find_loader() comme une alternative à find_module().
La PEP 366 dé crit l’ajout de l’attribut __package__ pour les importations relatives explicites dans les modules
principaux.
La PEP 328 a introduit les importations absolues et les importations relatives explicites. Elle a aussi proposé
__name__ pour la sé mantique que la PEP 366 attribuait à __package__.
PEP 338 dé finit l’exé cution de modules en tant que scripts.
PEP 451 ajoute l’encapsulation dans les objets spé cificateurs de l’é tat des importations, module par module. Elle
reporte aussi la majorité des responsabilité s des chargeurs vers le mé canisme d’importation. Ces changements per-
mettent de supprimer plusieurs API dans le systè me d’importation et d’ajouter de nouvelles mé thodes aux chercheurs
et chargeurs.
Notes
Expressions
et qu’aucune sé mantique n’est donné e, la sé mantique de name est la mê me que celle de othername.
6.2 Atomes
Les atomes sont les é lé ments de base des expressions. Les atomes les plus simples sont les identifiants et les litté raux.
Les expressions entre parenthè ses, crochets ou accolades sont aussi classé es syntaxiquement comme des atomes. La
syntaxe pour les atomes est :
77
The Python Language Reference, Version 3.13.7
µ Voir aussi
More precisely, private names are transformed to a longer form before code is generated for them. If the transformed
name is longer than 255 characters, implementation-defined truncation may happen.
The transformation is independent of the syntactical context in which the identifier is used but only the following
private identifiers are mangled :
— Any name used as the name of a variable that is assigned or read or any name of an attribute being accessed.
The __name__ attribute of nested functions, classes, and type aliases is however not mangled.
— The name of imported modules, e.g., __spam in import __spam. If the module is part of a package (i.e.,
its name contains a dot), the name is not mangled, e.g., the __foo in import __foo.bar is not mangled.
— The name of an imported member, e.g., __f in from spam import __f.
The transformation rule is defined as follows :
— The class name, with leading underscores removed and a single leading underscore inserted, is inserted in front
of the identifier, e.g., the identifier __spam occurring in a class named Foo, _Foo or __Foo is transformed
to _Foo__spam.
— If the class name consists only of underscores, the transformation is the identity, e.g., the identifier __spam
occurring in a class named _ or __ is left as is.
6.2.2 Littéraux
Python gè re les litté raux de chaînes de caractè res, de chaînes d’octets et de plusieurs autres types numé riques :
Evaluation of a literal yields an object of the given type (string, bytes, integer, floating-point number, complex number)
with the given value. The value may be approximated in the case of floating-point and imaginary (complex) literals.
See section Littéraux for details.
Tous les litté raux sont de types immuables et donc l’identifiant de l’objet est moins important que sa valeur. Des
é valuations multiples de litté raux avec la mê me valeur (soit la mê me occurrence dans le texte du programme, soit
une autre occurrence) ré sultent dans le mê me objet ou un objet diffé rent avec la mê me valeur.
78 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
Une compré hension est constitué e par une seule expression suivie par au moins une clause for et zé ro ou plus clauses
for ou if. Dans ce cas, les é lé ments du nouveau conteneur sont ceux qui auraient é té produits si l’on avait considé ré
toutes les clauses for ou if comme des blocs, imbriqué s de la gauche vers la droite, et é valué l’expression pour
produire un é lé ment à chaque fois que le bloc le plus imbriqué é tait atteint.
Cependant, à part l’expression de l’ité rable dans la clause for la plus à gauche, la compré hension est exé cuté e dans
une porté e sé paré e, implicitement imbriqué e. Ceci assure que les noms assigné s dans la liste cible ne « fuient » pas
en dehors de cette porté e.
L’expression de l’ité rable dans la clause for la plus à gauche est é valué e directement dans la porté e englobante puis
passé e en tant qu’argument à la porté e implicite imbriqué e. Les clauses for suivantes et les filtres conditionnels de
la clause for la plus à gauche ne peuvent pas ê tre é valué s dans la porté e englobante, car ils peuvent dé pendre de
valeurs obtenues à partir de l’ité rable le plus à gauche. Par exemple : [x*y for x in range(10) for y in
range(x, x+10)].
Pour assurer que le ré sultat de la compré hension soit un conteneur du type approprié , les expressions yield et yield
from sont interdites dans la porté e implicite imbriqué e.
Since Python 3.6, in an async def function, an async for clause may be used to iterate over a asynchronous
iterator. A comprehension in an async def function may consist of either a for or async for clause following
the leading expression, may contain additional for or async for clauses, and may also use await expressions.
If a comprehension contains async for clauses, or if it contains await expressions or other asynchronous com-
prehensions anywhere except the iterable expression in the leftmost for clause, it is called an asynchronous compre-
hension. An asynchronous comprehension may suspend the execution of the coroutine function in which it appears.
See also PEP 530.
Ajouté dans la version 3.6 : Les compré hensions asynchrones ont é té introduites.
Modifié dans la version 3.8 : yield et yield from sont interdites dans la porté e implicite imbriqué e.
Modifié dans la version 3.11 : les compré hensions asynchrones sont maintenant autorisé es dans les compré hensions
des fonctions asynchrones. Les compré hensions englobantes deviennent implicitement asynchrones.
Un agencement de liste produit un nouvel objet liste, dont le contenu est spé cifié soit par une liste d’expression soit
par une compré hension. Quand une liste d’expressions (dont les é lé ments sont sé paré s par des virgules) est fournie,
ces é lé ments sont é valué s de la gauche vers la droite et placé s dans l’objet liste, dans cet ordre. Quand c’est une
compré hension qui est fournie, la liste est construite à partir des é lé ments produits par la compré hension.
6.2. Atomes 79
The Python Language Reference, Version 3.13.7
Un agencement d’ensemble produit un nouvel objet ensemble mutable, le contenu é tant spé cifié soit par une sé quence
d’expression, soit par une compré hension. Quand une liste (dont les é lé ments sont sé paré s par des virgules) est fournie,
ses é lé ments sont é valué s de la gauche vers la droite et ajouté s à l’objet ensemble. Quand une compré hension est
fournie, l’ensemble est construit à partir des é lé ments produits par la compré hension.
Un ensemble vide ne peut pas ê tre construit par {} ; cette é criture construit un dictionnaire vide.
Une expression gé né ratrice produit un nouvel objet gé né rateur. Sa syntaxe est la mê me que celle des compré hensions,
sauf qu’elle est entouré e de parenthè ses au lieu de crochets ou d’accolades.
Variables used in the generator expression are evaluated lazily when the __next__() method is called for the gene-
rator object (in the same fashion as normal generators). However, the iterable expression in the leftmost for clause
is immediately evaluated, and the iterator is immediately created for that iterable, so that an error produced while
80 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
creating the iterator will be emitted at the point where the generator expression is defined, rather than at the point
where the first value is retrieved. Subsequent for clauses and any filter condition in the leftmost for clause cannot be
evaluated in the enclosing scope as they may depend on the values obtained from the leftmost iterable. For example :
(x*y for x in range(10) for y in range(x, x+10)).
Les parenthè ses peuvent ê tre omises pour les appels qui ne possè dent qu’un seul argument. Voir la section Appels
pour les dé tails.
Pour é viter d’interfé rer avec l’opé ration attendue de l’expression gé né ratrice elle-mê me, les expressions yield et
yield from sont interdites dans les gé né rateurs dé finis de maniè re implicite.
Si une expression gé né ratrice contient une ou des expressions async for ou await, elle est appelé e expression
génératrice asynchrone. Une expression gé né ratrice asynchrone produit un nouvel objet gé né rateur asynchrone qui
est un ité rateur asynchrone (voir Itérateurs asynchrones).
Ajouté dans la version 3.6 : les expressions gé né ratrices asynchrones ont é té introduites.
Modifié dans la version 3.7 : Avant Python 3.7, les expressions gé né ratrices asynchrones ne pouvaient apparaître que
dans les coroutines async def . À partir de la version 3.7, toute fonction peut utiliser des expressions gé né ratrices
asynchrones.
Modifié dans la version 3.8 : yield et yield from sont interdites dans la porté e implicite imbriqué e.
En raison des effets de bords sur la porté e contenant, les expressions yield ne sont pas autorisé es dans la porté e
implicite utilisé e dans l’implé mentation des compré hensions et des expressions gé né ratrices.
Modifié dans la version 3.8 : Les expressions yield sont interdites dans la porté e implicite imbriqué e utilisé e dans
l’implé mentation des compré hensions et des expressions gé né ratrices.
Les fonctions gé né ratrices sont dé crites plus loin alors que les fonctions gé né rateurs asynchrones sont dé crites sé pa-
ré ment dans la section Fonctions génératrices asynchrones.
When a generator function is called, it returns an iterator known as a generator. That generator then controls the
execution of the generator function. The execution starts when one of the generator’s methods is called. At that time,
the execution proceeds to the first yield expression, where it is suspended again, returning the value of yield_list
to the generator’s caller, or None if yield_list is omitted. By suspended, we mean that all local state is retained,
including the current bindings of local variables, the instruction pointer, the internal evaluation stack, and the state
of any exception handling. When the execution is resumed by calling one of the generator’s methods, the function
can proceed exactly as if the yield expression were just another external call. The value of the yield expression after
resuming depends on the method which resumed the execution. If __next__() is used (typically via either a for
or the next() builtin) then the result is None. Otherwise, if send() is used, then the result will be the value passed
in to that method.
Tout ceci rend les fonctions gé né ratrices trè s similaires aux coroutines : elles produisent plusieurs objets via des
expressions yield, elles possè dent plus qu’un seul point d’entré e et leur exé cution peut ê tre suspendue. La seule
6.2. Atomes 81
The Python Language Reference, Version 3.13.7
diffé rence est qu’une fonction gé né ratrice ne peut pas contrô ler où l’exé cution doit se poursuivre aprè s une instruction
yield ; ce contrô le est toujours du ressort de l’appelant au gé né rateur.
Les expressions yield sont autorisé es partout dans un bloc try . Si l’exé cution du gé né rateur ne reprend pas avant
qu’il ne soit finalisé (parce que son compteur de ré fé rence est tombé à zé ro ou parce qu’il est nettoyé par le ramasse-
miettes), la mé thode close() du gé né rateur-ité rateur est appelé e, ce qui permet l’exé cution de toutes les clauses
finally en attente.
L’expression passé e à yield from <expr> doit ê tre un ité rateur. Toutes les valeurs produites par cet ité rateur
sont directement passé es à l’appelant des mé thodes du gé né rateur courant. Toute valeur passé e par send() ou toute
exception passé e par throw() est transmise à l’ité rateur sous-jacent s’il possè de les mé thodes approprié es. Si ce n’est
pas le cas, alors send() lè ve une AttributeError ou une TypeError, alors que throw() ne fait que propager
l’exception immé diatement.
Quand l’ité rateur sous-jacent a terminé , l’attribut value de l’instance StopIteration qui a é té levé e devient la
valeur produite par l’expression yield. Elle peut ê tre dé finie explicitement quand vous levez StopIteration ou
automatiquement que le sous-ité rateur est un gé né rateur (en renvoyant une valeur par le sous-gé né rateur).
Modifié dans la version 3.3 : yield from <expr> a é té ajouté e pour dé lé guer le contrô le du flot d’exé cution à un
sous-ité rateur.
Les parenthè ses peuvent ê tre omises quand l’expression yield est la seule expression à droite de l’instruction de
l’instruction d’affectation.
µ Voir aussi
82 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
dé marrer le gé né rateur, elle doit avoir None comme argument, car il n’y a aucune expression yield qui peut
recevoir la valeur.
[Link](value)
[ [
[Link](type , value , traceback ]])
Lè ve une exception à l’endroit où le gé né rateur est en pause et renvoie la valeur suivante produite par la fonction
gé né ratrice. Si le gé né rateur termine sans produire de nouvelle valeur, une exception StopIteration est
levé e. Si la fonction gé né ratrice ne gè re pas l’exception passé e ou lè ve une autre exception, alors cette exception
est propagé e vers l’appelant.
Dans son utilisation typique, elle est appelé e avec une seule instance d’exception, de façon similaire à l’utilisation
du mot-clé raise.
Cependant, pour assurer la ré trocompatibilité , la deuxiè me signature est prise en charge, suivant une convention
des anciennes versions de Python. L’argument type doit ê tre une classe d’exception et value doit ê tre une instance
d’exception. Si value n’est pas fournie, le constructeur de type est appelé pour obtenir une instance. Si traceback
est fournie, elle est lié e sur l’exception, sinon tout attribut __traceback__ existant stocké dans value est
possiblement effacé .
Modifié dans la version 3.12 : The second signature (type[, value[, traceback]]) is deprecated and may be
removed in a future version of Python.
[Link]()
Raises a GeneratorExit exception at the point where the generator function was paused (equivalent to calling
throw(GeneratorExit)). The exception is raised by the yield expression where the generator was paused.
If the generator function catches the exception and returns a value, this value is returned from close(). If
the generator function is already closed, or raises GeneratorExit (by not catching the exception), close()
returns None. If the generator yields a value, a RuntimeError is raised. If the generator raises any other
exception, it is propagated to the caller. If the generator has already exited due to an exception or normal exit,
close() returns None and has no other effect.
Modifié dans la version 3.13 : If a generator returns a value upon being closed, the value is returned by
close().
Exemples
Voici un exemple simple qui montre le comportement des gé né rateurs et des fonctions gé né ratrices :
6.2. Atomes 83
The Python Language Reference, Version 3.13.7
Pour des exemples d’utilisation de yield from, lisez la pep-380 dans « Les nouveauté s de Python ».
84 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
yielding another value, the awaitable instead raises a StopAsyncIteration exception, signalling that the
asynchronous iteration has completed.
Cette mé thode est normalement appelé e implicitement par une boucle async for.
async [Link](value)
Returns an awaitable which when run resumes the execution of the asynchronous generator. As with the
send() method for a generator, this ”sends” a value into the asynchronous generator function, and the value
argument becomes the result of the current yield expression. The awaitable returned by the asend() me-
thod will return the next value yielded by the generator as the value of the raised StopIteration, or raises
StopAsyncIteration if the asynchronous generator exits without yielding another value. When asend()
is called to start the asynchronous generator, it must be called with None as the argument, because there is no
yield expression that could receive the value.
async [Link](value)
[ [
async [Link](type , value , traceback ]])
Renvoie un awaitable qui lè ve une exception du type type à l’endroit où le gé né rateur asynchrone a é té
mis en pause et renvoie la valeur suivante produite par la fonction gé né ratrice comme valeur de l’exception
StopIteration qui a é té levé e. Si le gé né rateur asynchrone termine sans produire de nouvelle valeur, une
exception StopAsyncIteration est levé e par le awaitable. Si la fonction gé né ratrice ne traite pas l’excep-
tion reçue ou lè ve une autre exception alors, quand le awaitable est lancé , cette exception est propagé e vers
l’appelant du awaitable.
Modifié dans la version 3.12 : The second signature (type[, value[, traceback]]) is deprecated and may be
removed in a future version of Python.
async [Link]()
Renvoie un awaitable qui, quand il s’exé cute, lè ve une exception GeneratorExit dans la fonction gé né ratrice
asynchrone à l’endroit où le gé né rateur é tait en pause. Si la fonction gé né ratrice asynchrone termine norma-
lement, est dé jà fermé e ou lè ve GeneratorExit (parce qu’elle ne gè re pas l’exception), alors le awaitable
renvoyé lè ve une exception StopIteration. Tout nouveau awaitable produit par un appel posté rieur au
gé né rateur asynchrone lè ve une exception StopAsyncIteration. Si le gé né rateur asynchrone produit une
valeur, une RuntimeError est levé e par le awaitable. Si le gé né rateur asynchrone lè ve une autre exception,
elle est propagé e à l’appelant du awaitable. Si le gé né rateur asynchrone a dé jà terminé (soit par une exception,
soit normalement), alors tout nouvel appel à aclose() renvoie un awaitable qui ne fait rien.
6.3 Primaires
Les primaires (primary dans la grammaire formelle ci-dessous) repré sentent les opé rations qui se lient au plus proche
dans le langage. Leur syntaxe est :
The primary must evaluate to an object of a type that supports attribute references, which most objects do. This object
is then asked to produce the attribute whose name is the identifier. The type and value produced is determined by the
object. Multiple evaluations of the same attribute reference may yield different objects.
This production can be customized by overriding the __getattribute__() method or the __getattr__() me-
thod. The __getattribute__() method is called first and either returns a value or raises AttributeError if
the attribute is not available.
If an AttributeError is raised and the object has a __getattr__() method, that method is called as a fallback.
6.3. Primaires 85
The Python Language Reference, Version 3.13.7
Lorsqu’on accè de à l’indice d’un objet, l’interpré teur é value la primaire et la liste d’expressions.
L’é valuation de la primaire doit produire un objet qui gè re l’indiçage. Un objet est susceptible de gé rer l’indiçage
s’il dé finit la ou les deux mé thodes __getitem__() et __class_getitem__(). Quand on spé cifie un indice du
primaire, le ré sultat de l’é valuation de la liste d’expression est passé à l’une de ces mé thodes. Pour plus de dé tails sur
le choix de __class_getitem__ ou __getitem__ pour l’appel, lisez __class_getitem__ contre __getitem__.
If the expression list contains at least one comma, or if any of the expressions are starred, the expression list will
evaluate to a tuple containing the items of the expression list. Otherwise, the expression list will evaluate to the
value of the list’s sole member.
Modifié dans la version 3.11 : Expressions in an expression list may be starred. See PEP 646.
Pour les objets natifs, deux types d’objets gè rent la sé lection via __getitem__() :
1. Si la primaire est un tableau de correspondances, la liste d’expressions (expression_list dans la grammaire
formelle ci-dessous) doit pouvoir ê tre é valué e comme un objet dont la valeur est une des clé s du tableau de
correspondances et la sé lection dé signe la valeur qui correspond à cette clé . Un exemple de classe implé men-
tant le concept de tableau de correspondances est la classe dict.
2. Si la primaire est une séquence, la liste d’expressions (expression_list dans la grammaire) doit pouvoir ê tre
é valué e comme un entier ou une tranche (comme expliqué dans la section suivante). Des exemples de
classes natives implé mentant le concept de sé quence sont les chaînes, listes et les n-uplets.
The formal syntax makes no special provision for negative indices in sequences. However, built-in sequences all
provide a __getitem__() method that interprets negative indices by adding the length of the sequence to the index
so that, for example, x[-1] selects the last item of x. The resulting value must be a nonnegative integer less than
the number of items in the sequence, and the subscription selects the item whose index is that value (counting from
zero). Since the support for negative indices and slicing occurs in the object’s __getitem__() method, subclasses
overriding this method will need to explicitly add that support.
Une chaîne est une espè ce particuliè re de sé quence dont les é lé ments sont des caractères. Un caractè re n’est pas un
type en tant que tel, c’est une chaîne de longueur un.
6.3.3 Tranches
Une tranche (slicing dans la grammaire formelle ci-dessous) sé lectionne un intervalle d’é lé ments d’un objet sé quence
(par exemple une chaîne, un n-uplet ou une liste, respectivement les types string, tuple et list). Les tranches peuvent
ê tre utilisé es comme des expressions ou des cibles dans les affectations ou les instructions del. La syntaxe est la
suivante :
Il existe une ambigü ité dans la syntaxe formelle ci-dessus : tout ce qui ressemble à une liste d’expressions (expres-
sion_list vue avant) ressemble aussi à une liste de tranches (slice_list dans la grammaire ci-dessus). En consé quence,
toute sé lection (subscription dans la grammaire) peut ê tre interpré té e comme une tranche. Plutô t que de compliquer
encore la syntaxe, l’ambigü ité est levé e en disant que, dans ce cas, l’interpré tation en tant que sé lection (subscription)
est prioritaire sur l’interpré tation en tant que tranche (c’est le cas si la liste de tranches (slice_list) ne contient aucune
tranche en tant que telle).
The semantics for a slicing are as follows. The primary is indexed (using the same __getitem__() method as
normal subscription) with a key that is constructed from the slice list, as follows. If the slice list contains at least one
86 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
comma, the key is a tuple containing the conversion of the slice items ; otherwise, the conversion of the lone slice
item is the key. The conversion of a slice item that is an expression is that expression. The conversion of a proper
slice is a slice object (see section Hiérarchie des types standards) whose start, stop and step attributes are the
values of the expressions given as lower bound, upper bound and stride, respectively, substituting None for missing
expressions.
6.3.4 Appels
Un appel (call dans la grammaire ci-dessous) appelle un objet appelable (par exemple, une fonction) avec, possible-
ment, une liste d’arguments :
6.3. Primaires 87
The Python Language Reference, Version 3.13.7
f(x1, x2, *y, x3, x4), si y s’é value comme une sé quence y1 … yM, c’est é quivalent à un appel avec M+4
arguments positionnels x1, x2, y1 … yM, x3, x4.
Une consé quence est que bien que la syntaxe *expression puisse apparaître après les arguments par nommé s
explicites, ils sont traité s avant les arguments nommé s (et avant tout argument **expression -- voir ci-dessous).
Ainsi :
Il est inhabituel que les syntaxes d’arguments par mots-clé s et *expression soient utilisé s simultané ment dans un
mê me appel, ce qui fait que la confusion reste rare.
Si la syntaxe **expression apparaît dans un appel de fonction, expression doit pouvoir s’é valuer comme un
tableau de correspondances, dont le contenu est traité comme des arguments par mots-clé s supplé mentaires. Si un
paramè tre correspondant à une clé a dé jà é té fourni (en tant qu’argument nommé explicite, en provenance d’un autre
dé paquetage), une exception TypeError est levé e.
Lorsque **expression est utilisé e, chaque clé de ce tableau de correspondances doit ê tre une chaîne. Chaque
valeur du tableau est affecté e au premier paramè tre formel é ligible à l’affectation par mot-clé dont le nom est é gal à la
clé . Une clé n’a pas besoin d’ê tre un identifiant Python (par exemple, "max-temp °F" est acceptable, bien qu’elle ne
corresponde à aucun paramè tre formel qui pourrait ê tre dé claré ). S’il n’y a pas de correspondance avec un paramè tre
formel, la paire clé -valeur est collecté e par le paramè tre **, s’il y en a un. S’il n’y a pas de paramè tre **, une exception
TypeError est levé e.
Les paramè tres formels qui utilisent la syntaxe *identifier ou **identifier ne peuvent pas ê tre utilisé s comme
arguments positionnels ou comme noms d’arguments par mots-clé s.
Modifié dans la version 3.5 : Les appels de fonction acceptent n’importe quel nombre de dé paquetages par * ou **.
Des arguments positionnels peuvent suivre les dé paquetages d’ité rables (*) et les arguments par mots-clé s peuvent
suivre les dé paquetages de dictionnaires (**). Proposé pour la premiè re fois par la PEP 448.
Un appel renvoie toujours une valeur, possiblement None, à moins qu’il ne lè ve une exception. La façon dont celle
valeur est calculé e dé pend du type de l’objet appelable.
Si c’est
une fonction définie par l’utilisateur :
The code block for the function is executed, passing it the argument list. The first thing the code block will
do is bind the formal parameters to the arguments ; this is described in section Définition de fonctions. When
the code block executes a return statement, this specifies the return value of the function call. If execution
reaches the end of the code block without executing a return statement, the return value is None.
une fonction ou une méthode native :
le ré sultat dé pend de l’interpré teur ; lisez built-in-funcs pour une description des fonctions et mé thodes natives.
un objet classe :
une nouvelle instance de cette classe est renvoyé e.
une méthode d’instance de classe :
la fonction correspondante dé finie par l’utilisateur est appelé e, avec la liste d’arguments qui est plus grande
d’un é lé ment que la liste des arguments de l’appel : l’instance est placé e en tê te des arguments.
une instance de classe :
The class must define a __call__() method ; the effect is then the same as if that method was called.
88 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
Ainsi, dans une sé quence sans parenthè se de puissance et d’opé rateurs unaires, les opé rateurs sont é valué s de droite
à gauche (ceci ne contraint pas l’ordre d’é valuation des opé randes) : -1**2 donne -1.
L’opé rateur puissance possè de la mê me sé mantique que la fonction native pow() lorsqu’elle est appelé e avec deux
arguments : il produit son argument de gauche é levé à la puissance de son argument de droite. Les arguments numé -
riques sont d’abord convertis vers un type commun et le ré sultat est de ce type.
Pour les opé randes entiers, le ré sultat est du mê me type à moins que le deuxiè me argument ne soit né gatif ; dans ce
cas, tous les arguments sont convertis en nombres à virgule flottante et le ré sultat est un nombre à virgule flottante.
Par exemple, 10**2 renvoie 100 mais 10**-2 renvoie 0.01.
Élever 0.0 à une puissance né gative entraîne une ZeroDivisionError. Élever un nombre né gatif à une puissance
fractionnaire renvoie un nombre complexe (dans les versions anté rieures, cela levait une ValueError).
This operation can be customized using the special __pow__() and __rpow__() methods.
L’opé rateur * (multiplication) produit le produit de ses arguments. Les deux arguments doivent ê tre des nombres
ou alors le premier argument doit ê tre un entier et l’autre doit ê tre une sé quence. Dans le premier cas, les nombres
sont convertis dans un type commun puis sont multiplié s entre eux. Dans le dernier cas, la sé quence est ré pé té e ; une
ré pé tition né gative produit une sé quence vide.
This operation can be customized using the special __mul__() and __rmul__() methods.
L’opé rateur @ (prononcé at en anglais) a vocation à multiplier des matrices. Aucun type Python natif n’implé mente
cet opé rateur.
This operation can be customized using the special __matmul__() and __rmatmul__() methods.
Ajouté dans la version 3.5.
Les opé rateurs / (division) et // (division entiè re ou floor division en anglais) produisent le quotient de leurs ar-
guments. Les arguments numé riques sont d’abord convertis vers un type commun. La division d’entiers produit un
nombre à virgule flottante alors que la division entiè re d’entiers produit un entier ; le ré sultat est celui de la divi-
sion mathé matique suivie de la fonction floor appliqué e au ré sultat. Une division par zé ro lè ve une exception
ZeroDivisionError.
The division operation can be customized using the special __truediv__() and __rtruediv__() methods. The
floor division operation can be customized using the special __floordiv__() and __rfloordiv__() methods.
The % (modulo) operator yields the remainder from the division of the first argument by the second. The numeric
arguments are first converted to a common type. A zero right argument raises the ZeroDivisionError exception.
The arguments may be floating-point numbers, e.g., 3.14%0.7 equals 0.34 (since 3.14 equals 4*0.7 + 0.34.)
The modulo operator always yields a result with the same sign as its second operand (or zero) ; the absolute value of
the result is strictly smaller than the absolute value of the second operand 1 .
Les opé rateurs division entiè re et modulo sont lié s par la relation suivante : x == (x//y)*y + (x%y). La division
entiè re et le module sont aussi lié s à la fonction native divmod() : divmod(x, y) == (x//y, x%y) 2 .
En plus de calculer le modulo sur les nombres, l’opé rateur % est aussi surchargé par les objets chaînes de caractè res
pour effectuer le formatage de chaîne « à l’ancienne ». La syntaxe pour le formatage de chaînes est dé crit dans la
ré fé rence de la bibliothè que Python, dans la section old-string-formatting.
The modulo operation can be customized using the special __mod__() and __rmod__() methods.
The floor division operator, the modulo operator, and the divmod() function are not defined for complex numbers.
Instead, convert to a floating-point number using the abs() function if appropriate.
L’opé rateur + (addition) produit la somme de ses arguments. Les arguments doivent ê tre tous les deux des nombres
ou des sé quences du mê me type. Dans le premier cas, les nombres sont convertis vers un type commun puis sont
additionné s entre eux. Dans le dernier cas, les sé quences sont concaté né es.
This operation can be customized using the special __add__() and __radd__() methods.
L’opé rateur - (soustraction) produit la diffé rence entre ses arguments. Les arguments numé riques sont d’abord conver-
tis vers un type commun.
This operation can be customized using the special __sub__() and __rsub__() methods.
Ces opé rateurs prennent des entiers comme arguments. Ils dé calent le premier argument vers la gauche ou vers la
droite du nombre de bits donné par le deuxiè me argument.
1. Bien que abs(x%y) < abs(y) soit vrai mathé matiquement, ce n’est pas toujours vrai pour les nombres à virgule flottante en raison des
arrondis. Par exemple, en supposant que Python tourne sur une plateforme où les float sont des nombres à double pré cision IEEE 754, afin que
-1e-100 % 1e100 soit du mê me signe que 1e100, le ré sultat calculé est -1e-100 + 1e100, qui vaut exactement 1e100 dans ce standard.
Or, la fonction [Link]() renvoie un ré sultat dont le signe est le signe du premier argument, c’est-à -dire -1e-100 dans ce cas. La meilleure
approche dé pend de l’application.
2. Si x est trè s proche d’un multiple entier de y, il est possible que x/y soit supé rieur de un par rapport à (x-x%y)//y en raison des arrondis.
Dans de tels cas, Python renvoie le second ré sultat afin d’avoir divmod(x,y)[0] * y + x % y le plus proche de x.
90 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
The left shift operation can be customized using the special __lshift__() and __rlshift__() methods. The
right shift operation can be customized using the special __rshift__() and __rrshift__() methods.
Un dé calage à droite de n bits est dé fini comme la division entiè re par pow(2,n). Un dé calage à gauche de n bits est
dé fini comme la multiplication par pow(2,n).
The & operator yields the bitwise AND of its arguments, which must be integers or one of them must be a custom
object overriding __and__() or __rand__() special methods.
The ^ operator yields the bitwise XOR (exclusive OR) of its arguments, which must be integers or one of them must
be a custom object overriding __xor__() or __rxor__() special methods.
The | operator yields the bitwise (inclusive) OR of its arguments, which must be integers or one of them must be a
custom object overriding __or__() or __ror__() special methods.
6.10 Comparaisons
Au contraire du C, toutes les opé rations de comparaison en Python possè dent la mê me priorité , qui est plus faible
que celle des opé rations arithmé tiques, dé calages ou binaires bit à bit. Toujours contrairement au C, les expressions
telles que a < b < c sont interpré té es comme elles le seraient conventionnellement en mathé matiques :
Les comparaisons donnent des valeurs boolé ennes (True ou False). Cependant, les méthodes de comparaison riche
dé finies par l’utilisateur peuvent renvoyer des non-boolé ens. Dans ce cas, le ré sultat de la comparaison est converti
en boolé en avec bool() dans les contextes qui attendent un boolé en.
Les comparaisons peuvent ê tre enchaîné es arbitrairement, par exemple x < y <= z est é quivalent à x < y and
y <= z, sauf que y est é valué seulement une fois (mais dans les deux cas, z n’est pas é valué du tout si x < y s’avè re
ê tre faux).
Formellement, si a, b, c … y, z sont des expressions et op1, op2 … opN sont des opé rateurs de comparaison, alors
a op1 b op2 c … y opN z est é quivalent à a op1 b and b op2 c and … y opN z, sauf que chaque ex-
pression est é valué e au maximum une fois.
Notez que a op1 b op2 c n’implique aucune comparaison entre a et c. Ainsi, par exemple, x < y > z est par-
faitement lé gal (mais peut-ê tre pas trè s é lé gant).
Because all types are (direct or indirect) subtypes of object, they inherit the default comparison behavior from
object. Types can customize their comparison behavior by implementing rich comparison methods like __lt__(),
described in Personnalisation de base.
Le comportement par dé faut pour le test d’é galité (== et !=) se base sur les identifiants des objets. Ainsi, un test
d’é galité entre deux instances qui ont le mê me identifiant est vrai, un test d’é galité entre deux instances qui ont des
identifiants diffé rents est faux. La raison de ce choix est que Python souhaite que tous les objets soient ré flexifs,
c’est-à -dire que x is y implique x == y.
La relation d’ordre (<, >, <= et >=) n’est pas fournie par dé faut ; une tentative se solde par une TypeError. La raison
de ce choix est qu’il n’existe pas d’invariant similaire à celui de l’é galité .
Le comportement du test d’é galité par dé faut, à savoir que les instances avec des identité s diffé rentes ne sont jamais
é gales, peut ê tre en contradiction avec les types qui dé finissent la « valeur » d’un objet et se basent sur cette « valeur »
pour l’é galité . De tels types doivent personnaliser leurs tests de comparaison et, en fait, c’est ce qu’ont fait un certain
nombre de types natifs.
La liste suivante dé crit le comportement des tests d’é galité pour les types natifs les plus importants.
— Beaucoup de types numé riques natifs (typesnumeric) et de types de la bibliothè que standard fractions.
Fraction ainsi que [Link] peuvent ê tre comparé s, au sein de leur propre classe ou avec d’autres
objets de classes diffé rentes. Une exception notable concerne les nombres complexes qui ne gè rent pas la
relation d’ordre. Dans les limites des types concerné s, la comparaison mathé matique é quivaut à la comparaison
algorithmique, sans perte de pré cision.
Les valeurs non numé riques float('NaN') et [Link]('NaN') sont spé ciales : toute compa-
raison entre un nombre et une valeur non numé rique est fausse. Une implication contre-intuitive à cela est
que les valeurs non numé riques ne sont pas é gales à elles-mê mes. Par exemple, avec x = float('NaN'),
les expressions 3 < x, x < 3 et x == x sont toutes fausses, mais l’expression x != x est vraie. Ce com-
portement est en accord avec IEEE 754.
— None and NotImplemented are singletons. PEP 8 advises that comparisons for singletons should always be
done with is or is not, never the equality operators.
— Les sé quences binaires (instances du type bytes ou bytearray) peuvent ê tre comparé es au sein de la classe
et entre classes. La comparaison est lexicographique, en utilisant la valeur numé rique des é lé ments.
— Les chaînes de caractè res (instances de str) respectent l’ordre lexicographique en utilisant la valeur Unicode
(le ré sultat de la fonction native ord()) des caractè res 3 .
Les chaînes de caractè res et les sé quences binaires ne peuvent pas ê tre comparé es directement.
— Les sé quences (instances de tuple, list ou range) peuvent ê tre comparé es uniquement entre instances de
mê me type, en sachant que les intervalles (range) ne gè rent pas la relation d’ordre. Le test d’é galité entre ces
types renvoie faux et une comparaison entre instances de types diffé rents lè ve une TypeError.
Les sé quences se comparent lexicographiquement en comparant les é lé ments correspondants. Les conteneurs
natifs supposent gé né ralement que les objets identiques sont é gaux à eux-mê mes. Cela leur permet d’é cono-
miser les tests d’é galité pour des objets identiques afin d’amé liorer les performances et de conserver leurs
invariants internes.
L’ordre lexicographique pour les collections natives fonctionne comme suit :
— Deux collections sont é gales si elles sont du mê me type, ont la mê me longueur et si les é lé ments cor-
respondants de chaque paire sont é gaux. Par exemple, [1,2] == (1,2) est faux car les types sont
diffé rents.
— Les collections qui gè rent la relation d’ordre sont ordonné es comme leur premier é lé ment diffé rent (par
exemple, [1,2,x] <= [1,2,y] a la mê me valeur que x <= y). Si un é lé ment n’a pas de correspondant,
la collection la plus courte est la plus petite (par exemple, [1,2] < [1,2,3] est vrai).
3. Le standard Unicode distingue les points codes (code points en anglais, par exemple U+0041) et les caractères abstraits (abstract characters
en anglais, par exemple « LATIN CAPITAL LETTER A »). Bien que la plupart des caractè res abstraits de l’Unicode ne sont repré senté s que par
un seul point code, il y a un certain nombre de caractè res abstraits qui peuvent ê tre repré senté s par une sé quence de plus qu’un point code. Par
exemple, le caractè re abstrait « LATIN CAPITAL LETTER C WITH CEDILLA » peut ê tre repré senté comme un unique caractère précomposé
au point code U+00C7, ou en tant que sé quence d’un caractère de base à la position U+0043 (LATIN CAPITAL LETTER C) du code, suivi par
un caractère combiné à la position U+0327 (COMBINING CEDILLA) du code.
Les opé rateurs de comparaison des chaînes opè rent au niveau des points codes Unicode. Cela peut ê tre dé routant pour des humains. Par
exemple, "\u00C7" == "\u0043\u0327" renvoie False, bien que les deux chaînes repré sentent le mê me caractè re abstrait ”LATIN CAPI-
TAL LETTER C WITH CEDILLA”.
Pour comparer des chaînes au niveau des caractè res abstraits (afin d’avoir quelque chose d’intuitif pour les humains), utilisez unicodedata.
normalize().
92 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
— Les tableaux de correspondances (instances de dict) sont é gales si et seulement si toutes leurs paires (clé,
valeur) sont é gales. L’é galité des clé s et des valeurs met en œuvre la ré flexivité .
x != y et y != x
x < y et y > x
x <= y et y >= x
— La comparaison doit ê tre transitive. Les exemples suivants (liste non exhaustive) illustrent ce concept :
x > y and y > z implique x > z
6.10. Comparaisons 93
The Python Language Reference, Version 3.13.7
For user-defined classes which do not define __contains__() but do define __iter__(), x in y is True if some
value z, for which the expression x is z or x == z is true, is produced while iterating over y. If an exception is
raised during the iteration, it is as if in raised that exception.
Lastly, the old-style iteration protocol is tried : if a class defines __getitem__(), x in y is True if and only if
there is a non-negative integer index i such that x is y[i] or x == y[i], and no lower integer index raises the
IndexError exception. (If any other exception is raised, it is as if in raised that exception).
L’opé rateur not in est dé fini comme produisant le contraire de in.
In the context of Boolean operations, and also when expressions are used by control flow statements, the following
values are interpreted as false : False, None, numeric zero of all types, and empty strings and containers (including
strings, tuples, lists, dictionaries, sets and frozensets). All other values are interpreted as true. User-defined objects
can customize their truth value by providing a __bool__() method.
L’opé rateur not produit True si son argument est faux, False sinon.
L’expression x and y commence par é valuer x ; si x est faux, sa valeur est renvoyé e ; sinon, y est é valué et la valeur
ré sultante est renvoyé e.
L’expression x or y commence par é valuer x ; si x est vrai, sa valeur est renvoyé e ; sinon, y est é valué et la valeur
ré sultante est renvoyé e.
Notez que ni and ni or ne restreignent la valeur et le type qu’ils renvoient à False et True : ils renvoient le dernier
argument é valué . Ceci peut ê tre utile, par exemple : si une chaîne s doit ê tre remplacé e par une valeur par dé faut
si elle est vide, l’expression s or 'truc' produit la valeur voulue. Comme not doit cré er une nouvelle valeur, il
renvoie une valeur boolé enne quel que soit le type de son argument (par exemple, not 'truc' produit False plutô t
que ''.
Une expression d’affectation (parfois aussi appelé e « expression nommé e » ou « expression morse ») affecte
l’expression à un identifiant et renvoie la valeur de l’expression.
Une utilisation classique concerne les correspondances d’expressions rationnelles :
if matching := [Link](data):
do_something(matching)
4. En raison du ramasse-miettes automatique et de la nature dynamique des descripteurs, vous pouvez ê tre confronté à un comportement
semblant bizarre lors de certaines utilisations de l’opé rateur is, par exemple si cela implique des comparaisons entre des mé thodes d’instances ou
des constantes. Allez vé rifier dans la documentation pour plus d’informations.
94 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
Assignment expressions must be surrounded by parentheses when used as expression statements and when used as sub-
expressions in slicing, conditional, lambda, keyword-argument, and comprehension-if expressions and in assert,
with, and assignment statements. In all other places where they can be used, parentheses are not required, including
in if and while statements.
Ajouté dans la version 3.8 : Voir la PEP 572 pour plus de dé tails sur les expressions d’affectation.
Les expressions conditionnelles (parfois appelé es « opé rateur ternaire ») sont les moins prioritaires de toutes les
opé rations Python.
L’expression x if C else y commence par é valuer la condition C. Si C est vrai, alors x est é valué et sa valeur est
renvoyé e ; sinon, y est é valué et sa valeur est renvoyé e.
Voir la PEP 308 pour plus de dé tails sur les expressions conditionnelles.
def <lambda>(parameters):
return expression
Voir la section Définition de fonctions pour la syntaxe des listes de paramè tres. Notez que les fonctions cré ées par des
expressions lambda ne peuvent pas contenir d’instructions ou d’annotations.
Opérateur Description
(expressions…), Expression de liaison ou parenthè se, affichage de liste, affi-
[expressions…], {key: value…}, chage de dictionnaire, affichage de set
{expressions…}
x[indice], x[indice:indice], indiçage, tranches, appel, ré fé rence à un attribut
x(arguments…), [Link]
await x Expression await
** Puissance 5
+x, -x, ~x NOT (positif, né gatif, bit à bit)
*, @, /, //, % Multiplication, multiplication de matrices, division, division
entiè re, reste 6
+, - Addition et soustraction
<<, >> dé calages
& AND (bit à bit)
^ XOR (bit à bit)
| OR (bit à bit)
in, not in, is, is not, <, <=, >, >=, !=, == Comparaisons, y compris les tests d’appartenance et les tests
d’identifiants
not x NOT (boolé en)
and AND (boolé en)
or OR (boolé en)
if -- else Expressions conditionnelles
lambda Expression lambda
:= Expression d’affectation
5. L’opé rateur puissance ** est moins prioritaire qu’un opé rateur unaire arithmé tique ou bit à bit sur sa droite. Ainsi, 2**-1 vaut 0.5.
6. L’opé rateur % est aussi utilisé pour formater les chaînes de caractè res ; il y possè de la mê me priorité .
96 Chapitre 6. Expressions
The Python Language Reference, Version 3.13.7
Notes
98 Chapitre 6. Expressions
CHAPITRE 7
Une instruction simple est contenue dans une seule ligne logique. Plusieurs instructions simples peuvent ê tre é crites
sur une seule ligne, sé paré es par des points-virgules. La syntaxe d’une instruction simple est :
Ce genre d’instruction é value la liste d’expressions (qui peut se limiter à une seule expression).
En mode interactif, si la valeur n’est pas None, elle est convertie en chaîne en utilisant la fonction native repr() et
la chaîne ré sultante est é crite sur la sortie standard sur sa propre ligne. Si le ré sultat est None, rien n’est é crit ce qui
est usuel pour les appels de procé dures.
99
The Python Language Reference, Version 3.13.7
class Cls:
x = 3 # class variable
inst = Cls()
inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3
Cette description ne s’applique pas né cessairement aux attributs des descripteurs, telles que les proprié té s
cré ées avec property().
— Si la cible est une sé lection : l’expression primaire de la ré fé rence est é valué e. Elle doit produire soit un objet
sé quence mutable (telle qu’une liste) ou un objet tableau de correspondances (tel qu’un dictionnaire). Ensuite,
l’expression de la sé lection est é valué e.
Si la primaire est un objet sé quence mutable (telle qu’une liste), la sé lection doit produire un entier. S’il est
né gatif, la longueur de la sé quence lui est ajouté e. La valeur ré sultante doit ê tre un entier positif ou nul, plus
petit que la longueur de la sé quence, et Python demande à la sé quence d’assigner l’objet à l’é lé ment se trouvant
à cet indice. Si l’indice est hors limites, une IndexError est levé e (une assignation à une sé lection dans une
sé quence ne peut pas ajouter de nouveaux é lé ments à une liste).
Si la primaire est un objet tableau de correspondances (tel qu’un dictionnaire), la sé lection doit ê tre d’un type
compatible avec le type des clé s ; Python demande alors au tableau de correspondances de cré er un couple
clé -valeur qui associe la sé lection à l’objet assigné . Ceci peut remplacer une correspondance dé jà existante
pour une clé donné e ou insé rer un nouveau couple clé -valeur.
For user-defined objects, the __setitem__() method is called with appropriate arguments.
— Si la cible est une tranche : l’expression primaire de la ré fé rence est é valué e. Elle doit produire un objet
sé quence mutable (telle qu’une liste). L’objet assigné doit ê tre un objet sé quence du mê me type. Ensuite,
les expressions de la borne infé rieure et de la borne supé rieure sont é valué es, dans la mesure où elles sont
spé cifié es (les valeurs par dé faut sont zé ro et la longueur de la sé quence). Les bornes doivent ê tre des entiers.
Si une borne est né gative, la longueur de la sé quence lui est ajouté e. Les bornes ré sultantes sont coupé es pour
ê tre dans l’intervalle zé ro -- longueur de la sé quence, inclus. Finalement, Python demande à l’objet sé quence
de remplacer la tranche avec les é lé ments de la sé quence à assigner. La longueur de la tranche peut ê tre
diffé rente de la longueur de la sé quence à assigner, ce qui modifie alors la longueur de la sé quence cible, si
celle-ci le permet.
Dans l’implé mentation actuelle, la syntaxe pour les cibles est similaire à celle des expressions. Toute syntaxe invalide
est rejeté e pendant la phase de gé né ration de code, ce qui produit des messages d’erreurs moins dé taillé s.
Bien que la dé finition de l’assignation implique que le passage entre le cô té gauche et le cô té droit soient « simultané s »
(par exemple, a, b = b, a permute les deux variables), le passage à l’intérieur des collections de variables que l’on
assigne intervient de la gauche vers la droite, ce qui peut entraîner quelques confusions. Par exemple, le programme
suivant affiche [0, 2] :
x = [0, 1]
i = 0
i, x[i] = 1, 2 # i is updated, then x[i] is updated
print(x)
µ Voir aussi
µ Voir aussi
Modifié dans la version 3.8 : Doré navant, cô té droit des assignations annoté es, peuvent figurer les mê mes expres-
sions que pour les assignations normales. Auparavant, certaines expressions (comme des n-uplets sans parenthè se
englobante) gé né raient des erreurs de syntaxe.
if __debug__:
if not expression: raise AssertionError
if __debug__:
if not expression1: raise AssertionError(expression2)
These equivalences assume that __debug__ and AssertionError refer to the built-in variables with those names.
In the current implementation, the built-in variable __debug__ is True under normal circumstances, False when
optimization is requested (command line option -O). The current code generator emits no code for an assert
statement when optimization is requested at compile time. Note that it is unnecessary to include the source code for
the expression that failed in the error message ; it will be displayed as part of the stack trace.
Assigner vers __debug__ est illé gal. La valeur de cette variable native est dé terminé e au moment où l’interpré teur
dé marre.
La suppression est ré cursivement dé finie de la mê me maniè re que l’assignation. Plutô t que de dé tailler cela de maniè re
approfondie, voici quelques indices.
La suppression d’une liste cible (target_list dans la grammaire ci-dessus) supprime ré cursivement chaque cible, de la
gauche vers la droite.
Deletion of a name removes the binding of that name from the local or global namespace, depending on whether the
name occurs in a global statement in the same code block. Trying to delete an unbound name raises a NameError
exception.
La suppression d’une ré fé rence à un attribut, une sé lection ou une tranche est passé e à l’objet primaire concerné : la
suppression d’une tranche est en gé né ral é quivalente à l’assignation d’une tranche vide du type adé quat (mais ceci est
au final dé terminé par l’objet que l’on tranche).
Modifié dans la version 3.2 : Auparavant, il é tait illé gal de supprimer un nom dans l’espace des noms locaux si celui-ci
apparaissait comme variable libre dans un bloc imbriqué .
return ne peut ê tre placé e qu’à l’inté rieur d’une dé finition de fonction, pas à l’inté rieur d’une dé finition de classe.
Si une liste d’expressions (expression_list dans la grammaire ci-dessus) est pré sente, elle est é valué e, sinon None est
utilisé e comme valeur par dé faut.
return quitte l’appel à la fonction courante avec la liste d’expressions (ou None) comme valeur de retour.
Quand return fait sortir d’une instruction try avec une clause finally , cette clause finally est exé cuté e avant
de ré ellement quitter la fonction.
Dans une fonction gé né ratrice, l’instruction return indique que le gé né rateur est terminé et provoque la levé e d’une
StopIteration. La valeur de retour (s’il y en a une) est utilisé e comme argument pour construire l’exception
StopIteration et devient l’attribut [Link].
Dans une fonction gé né ratrice asynchrone, une instruction return vide indique que le gé né rateur asynchrone est
terminé et provoque la levé e d’une StopAsyncIteration. Une instruction return non vide est une erreur de
syntaxe dans une fonction gé né ratrice asynchrone.
A yield statement is semantically equivalent to a yield expression. The yield statement can be used to omit the
parentheses that would otherwise be required in the equivalent yield expression statement. For example, the yield
statements
yield <expr>
yield from <expr>
(yield <expr>)
(yield from <expr>)
Yield expressions and statements are only used when defining a generator function, and are only used in the body of
the generator function. Using yield in a function definition is sufficient to cause that definition to create a generator
function instead of a normal function.
Pour tous les dé tails sur la sé mantique de yield, reportez-vous à la section Expressions yield.
Si aucune expression n’est pré sente, raise propage l’exception en cours de traitement, aussi dé nommé e exception
active. Si aucune exception n’est active, une exception RuntimeError est levé e, indiquant que c’est une erreur.
Sinon, raise é value la premiè re expression en tant qu’objet exception. Ce doit ê tre une sous-classe ou une instance
de BaseException. Si c’est une classe, l’instance de l’exception est obtenue en instanciant la classe sans argument
(au moment voulu).
Le type de l’exception est la classe de l’instance de l’exception, la value est l’instance elle-mê me.
A traceback object is normally created automatically when an exception is raised and attached to it as the
__traceback__ attribute. You can create an exception and set your own traceback in one step using the
with_traceback() exception method (which returns the same exception instance, with its traceback set to its
argument), like so :
The from clause is used for exception chaining : if given, the second expression must be another exception class or ins-
tance. If the second expression is an exception instance, it will be attached to the raised exception as the __cause__
attribute (which is writable). If the expression is an exception class, the class will be instantiated and the resulting
exception instance will be attached to the raised exception as the __cause__ attribute. If the raised exception is not
handled, both exceptions will be printed :
>>> try:
... print(1 / 0)
... except Exception as exc:
... raise RuntimeError("Something bad happened") from exc
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
print(1 / 0)
~~^~~
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
A similar mechanism works implicitly if a new exception is raised when an exception is already being handled. An
exception may be handled when an except or finally clause, or a with statement, is used. The previous exception
is then attached as the new exception’s __context__ attribute :
>>> try:
... print(1 / 0)
... except:
... raise RuntimeError("Something bad happened")
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
print(1 / 0)
~~^~~
ZeroDivisionError: division by zero
Exception chaining can be explicitly suppressed by specifying None in the from clause :
>>> try:
... print(1 / 0)
... except:
... raise RuntimeError("Something bad happened") from None
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError: Something bad happened
Des informations complé mentaires sur les exceptions sont disponibles dans la section Exceptions et sur la gestion des
exceptions dans la section L’instruction try.
Modifié dans la version 3.3 : None est doré navant autorisé e en tant que Y dans raise X from Y.
Added the __suppress_context__ attribute to suppress automatic display of the exception context.
Modifié dans la version 3.11 : si la trace d’appels de l’exception active est modifié e dans une clause except, une
instruction raise posté rieure lè ve à nouveau l’exception avec la trace modifié e. Auparavant, l’exception é tait levé e à
nouveau avec la trace qu’elle avait au moment de son interception.
Une instruction break ne peut apparaître qu’à l’inté rieur d’une boucle for ou while, mais pas dans une dé finition
de fonction ou de classe à l’inté rieur de cette boucle.
Elle termine la boucle la plus imbriqué e, shuntant l’é ventuelle clause else de la boucle.
Si une boucle for est terminé e par un break, la cible qui contrô le la boucle garde sa valeur.
Quand break passe le contrô le en dehors d’une instruction try qui comporte une clause finally , cette clause
finally est exé cuté e avant de quitter la boucle.
L’instruction de base import (sans clause from) est exé cuté e en deux é tapes :
1. trouve un module, le charge et l’initialise si né cessaire
2. dé finit un ou des noms (name dans la grammaire ci-dessus) dans l’espace des noms locaux de la porté e où
l’instruction import apparaît.
Quand l’instruction contient plusieurs clauses (sé paré es par des virgules), les deux é tapes sont mené es sé paré ment
pour chaque clause, comme si les clauses é taient sé paré es dans des instructions d’importations individuelles.
Les dé tails de la premiè re é tape, de recherche et de chargement des modules, sont dé crits largement dans la section
relative au système d’importation, qui dé crit é galement les diffé rents types de paquets et modules qui peuvent ê tre
importé s, de mê me que les points d’entré e pouvant ê tre utilisé s pour personnaliser le systè me d’importation. Notez
que des erreurs dans cette é tape peuvent indiquer soit que le module n’a pas é té trouvé , soit qu’une erreur s’est produite
lors de l’initialisation du module, ce qui comprend l’exé cution du code du module.
Si le module requis est bien ré cupé ré , il est mis à disposition de l’espace de nommage local suivant l’une des trois
façons suivantes :
— Si le nom du module est suivi par as, alors le nom suivant as est directement lié au module importé .
— si aucun autre nom n’est spé cifié et que le module en cours d’importation est un module de niveau le plus haut,
le nom du module est lié dans l’espace des noms locaux au module importé ;
— si le module en cours d’importation n’est pas un module de plus haut niveau, alors le nom du paquet de plus
haut niveau qui contient ce module est lié dans l’espace des noms locaux au paquet de plus haut niveau. Vous
pouvez accé der au module importé en utilisant son nom pleinement qualifié et non directement.
La forme from utilise un processus un peu plus complexe :
1. trouve le module spé cifié dans la clause from, le charge et l’initialise si né cessaire ;
2. pour chaque nom spé cifié dans les clauses import :
1. vé rifie si le module importé possè de un attribut avec ce nom ;
2. si non, essaie d’importer un sous-module avec ce nom puis vé rifie si le module importé possè de lui-mê me
cet attribut ;
3. si l’attribut n’est pas trouvé , une ImportError est levé e.
4. sinon, une ré fé rence à cette valeur est stocké e dans l’espace des noms locaux, en utilisant le nom de la
clause as si elle est pré sente, sinon en utilisant le nom de l’attribut.
Exemples :
from [Link] import baz # foo, [Link], and [Link] imported, [Link]␣
,→bound as baz
from foo import attr # foo imported and [Link] bound as attr
Si la liste des noms est remplacé e par une é toile ('*'), tous les noms publics dé finis dans le module sont lié s dans
l’espace des noms locaux de la porté e où apparaît l’instruction import.
Les noms publics dé finis par un module sont dé terminé s en cherchant dans l’espace de nommage du module une
variable nommé e __all__ ; Si elle est dé finie, elle doit ê tre une sé quence de chaînes dé signant les noms dé finis ou
importé s par ce module. Les noms donné s dans __all__ sont tous considé ré s publics et doivent exister. Si __all__
n’est pas dé finie, l’ensemble des noms publics contient tous les noms trouvé s dans l’espace des noms du module qui
ne commencent pas par un caractè re souligné (_). __all__ doit contenir toute l’API publique. Elle est destiné e à
é viter l’exportation accidentelle d’é lé ments qui ne font pas partie de l’API (tels que des modules de bibliothè ques qui
ont é té importé s et utilisé s à l’inté rieur du module).
La forme d’import avec asté risque --- from module import * --- est autorisé e seulement au niveau du module.
Si vous essayez de l’utiliser dans une dé finition de classe ou de fonction, cela lè ve une SyntaxError.
Quand vous spé cifiez les modules à importer, vous n’avez pas besoin de spé cifier les noms absolus des modules. Quand
un module ou un paquet est contenu dans un autre paquet, il est possible d’effectuer une importation relative à l’inté -
rieur du mê me paquet de plus haut niveau sans avoir à mentionner le nom du paquet. En utilisant des points en entê te
du module ou du paquet spé cifié aprè s from, vous pouvez spé cifier combien de niveaux vous souhaitez remonter
dans la hié rarchie du paquet courant sans spé cifier de nom exact. Un seul point en tê te signifie le paquet courant où
se situe le module qui effectue l’importation. Deux points signifient de remonter d’un niveau. Trois points, remon-
ter de deux niveaux et ainsi de suite. Ainsi, si vous exé cutez from . import mod dans un module du paquet pkg,
vous importez finalement [Link]. Et si vous exé cutez from ..souspkg2 import mod depuis pkg.souspkg1,
vous importez finalement [Link]. La spé cification des importations relatives se situe dans la section
Importations relatives au paquet.
importlib.import_module() est fournie pour gé rer les applications qui dé terminent dynamiquement les mo-
dules à charger.
Lè ve un é vè nement d’audit avec les arguments module, filename, [Link], sys.meta_path, sys.
path_hooks.
Une instruction future doit apparaître en haut du module. Les seules lignes autorisé es avant une instruction future
sont :
— la chaîne de documentation du module (si elle existe),
— des commentaires,
— des lignes vides et
— d’autres instructions future.
La seule fonctionnalité qui né cessite l’utilisation de l’instruction future est annotations (voir la PEP 563).
Toutes les fonctionnalité s (feature dans la grammaire ci-dessus) autorisé es par l’instruction future sont toujours
reconnues par Python 3. Cette liste comprend absolute_import, division, generators, generator_stop,
unicode_literals, print_function, nested_scopes et with_statement. Elles sont toutes redondantes
car elles sont de toute maniè re activé es ; elles ne sont conservé es que par souci de compatibilité descendante.
Une instruction future est reconnue et traité e spé cialement au moment de la compilation : les modifications à la sé -
mantique des constructions de base sont souvent implé menté es en gé né rant un code diffé rent. Il peut mê me arriver
qu’une nouvelle fonctionnalité ait une syntaxe incompatible (tel qu’un nouveau mot ré servé ) ; dans ce cas, le compila-
teur a besoin d’analyser le module de maniè re diffé rente. De telles dé cisions ne peuvent pas ê tre diffé ré es au moment
de l’exé cution.
Pour une version donné e, le compilateur sait quelles fonctionnalité s ont é té dé finies et lè ve une erreur à la compilation
si une instruction future contient une fonctionnalité qui lui est inconnue.
La sé mantique à l’exé cution est la mê me que pour toute autre instruction d’importation : il existe un module standard
__future__, dé crit plus loin, qui est importé comme les autres au moment où l’instruction future est exé cuté e.
La sé mantique particuliè re à l’exé cution dé pend des fonctionnalité s apporté es par l’instruction future.
Notez que l’instruction suivante est tout à fait normale :
Ce n’est pas une instruction future ; c’est une instruction d’importation ordinaire qui n’a aucune sé mantique particuliè re
ou restriction de syntaxe.
Code compiled by calls to the built-in functions exec() and compile() that occur in a module M containing a
future statement will, by default, use the new syntax or semantics associated with the future statement. This can be
controlled by optional arguments to compile() --- see the documentation of that function for details.
Une instruction future entré e à l’invite de l’interpré teur interactif est effective pour le reste de la session de l’interpré -
teur. Si l’interpré teur est dé marré avec l’option -i, qu’un nom de script est passé pour ê tre exé cuté et que ce script
contient une instruction future, elle est effective pour la session interactive qui dé marre aprè s l’exé cution du script.
µ Voir aussi
The global statement causes the listed identifiers to be interpreted as globals. It would be impossible to assign to a
global variable without global, although free variables may refer to globals without being declared global.
The global statement applies to the entire current scope (module, function body or class definition). A
SyntaxError is raised if a variable is used or assigned to prior to its global declaration in the scope.
At the module level, all variables are global, so a global statement has no effect. However, variables must still not be
used or assigned to prior to their global declaration. This requirement is relaxed in the interactive prompt (REPL).
Note pour les programmeurs : global est une directive à l’attention de l’analyseur syntaxique. Elle s’applique uni-
quement au code analysé en mê me temps que l’instruction global. En particulier, une instruction global contenue
dans une chaîne ou un objet code fourni à la fonction native exec() n’affecte pas le code contenant cet appel et le
code contenu dans un telle chaîne n’est pas affecté par une instruction global placé e dans le code contenant l’appel.
Il en est de mê me pour les fonctions eval() et compile().
When the definition of a function or class is nested (enclosed) within the definitions of other functions, its nonlocal
scopes are the local scopes of the enclosing functions. The nonlocal statement causes the listed identifiers to refer
to names previously bound in nonlocal scopes. It allows encapsulated code to rebind such nonlocal identifiers. If a
name is bound in more than one nonlocal scope, the nearest binding is used. If a name is not bound in any nonlocal
scope, or if there is no nonlocal scope, a SyntaxError is raised.
The nonlocal statement applies to the entire scope of a function or class body. A SyntaxError is raised if a
variable is used or assigned to prior to its nonlocal declaration in the scope.
µ Voir aussi
Programmer’s note : nonlocal is a directive to the parser and applies only to code parsed along with it. See the
note for the global statement.
annotation-def VALUE_OF_Point():
return tuple[float, float]
Point = [Link]("Point", VALUE_OF_Point())
annotation-def indicates an annotation scope, which behaves mostly like a function, but with several small dif-
ferences.
The value of the type alias is evaluated in the annotation scope. It is not evaluated when the type alias is created, but
only when the value is accessed through the type alias’s __value__ attribute (see Lazy evaluation). This allows the
type alias to refer to names that are not yet defined.
Type aliases may be made generic by adding a type parameter list after the name. See Generic type aliases for more.
type is a soft keyword.
µ Voir aussi
Instructions composées
Les instructions composé es contiennent d’autres (groupes d’) instructions ; elles affectent ou contrô lent l’exé cution de
ces autres instructions d’une maniè re ou d’une autre. En gé né ral, une instruction composé e couvre plusieurs lignes
bien que, dans sa forme la plus simple, une instruction composé e peut tenir sur une seule ligne.
Les instructions if , while et for implé mentent les constructions classiques de contrô le de flux. try dé finit des
gestionnaires d’exception et du code de nettoyage pour un groupe d’instructions, tandis que l’instruction with permet
l’exé cution de code d’initialisation et de finalisation autour d’un bloc de code. Les dé finitions de fonctions et de classes
sont é galement, au sens syntaxique, des instructions composé es.
Une instruction composé e comporte une ou plusieurs « clauses ». Une clause se compose d’un en-tê te et d’une
« suite ». Les en-tê tes des clauses d’une instruction composé e particuliè re sont toutes placé es au mê me niveau d’in-
dentation. Chaque en-tê te de clause commence par un mot-clé spé cifique et se termine par le caractè re deux-points
(:) ; une suite est un groupe d’instructions contrô lé es par une clause ; une suite se compose, aprè s les deux points de
l’en-tê te, soit d’une ou plusieurs instructions simples sé paré es par des points-virgules si elles sont sur la mê me ligne
que l’en-tê te, soit d’une ou plusieurs instructions en retrait sur les lignes suivantes. Seule cette derniè re forme d’une
suite peut contenir des instructions composé es ; ce qui suit n’est pas licite, principalement parce qu’il ne serait pas
clair de savoir à quelle clause if se rapporterait une clause else placé e en fin de ligne :
Notez é galement que le point-virgule se lie plus é troitement que le deux-points dans ce contexte, de sorte que dans
l’exemple suivant, soit tous les appels print() sont exé cuté s, soit aucun ne l’est :
En ré sumé :
111
The Python Language Reference, Version 3.13.7
Notez que ces instructions se terminent toujours par un lexè me NEWLINE suivi é ventuellement d’un DEDENT. Notez
é galement que les clauses facultatives qui suivent commencent toujours par un mot-clé qui ne peut pas commencer
une instruction. Ainsi, il n’y a pas d’ambiguïté (le problè me du else dont on ne sait pas à quel if il est relié est ré solu
en Python en exigeant que des instructions if imbriqué es soient indenté es les unes par rapport aux autres).
L’agencement des rè gles de grammaire dans les sections qui suivent place chaque clause sur une ligne sé paré e pour
plus de clarté .
8.1 L’instruction if
L’instruction if est utilisé e pour exé cuter des instructions en fonction d’une condition :
Python é value l’expression de maniè re ré pé té e et, tant qu’elle est vraie, exé cute la premiè re suite ; si l’expression est
fausse (ce qui peut arriver mê me lors du premier test), la suite de la clause else, si elle existe, est exé cuté e et la
boucle se termine.
Une instruction break exé cuté e dans la premiè re suite termine la boucle sans exé cuter la suite de la clause else.
Une instruction continue exé cuté e dans la premiè re suite saute le reste de la suite et retourne au test de l’expression.
L’expression starred_list n’est é valué e qu’une seule fois ; elle doit produire un objet iterable. Un iterator est cré é
pour cet ité rable. Le premier é lé ment produit par l’ité rateur est assigné à la liste cible (target_list dans la grammaire
ci-dessus) en utilisant les rè gles des affectations (voir Les assignations), puis la « suite » est exé cuté e. Lorsque les
é lé ments de l’ité rateur sont é puisé s, la « suite » de la clause else, si elle existe, est exé cuté e et la boucle se termine.
Une instruction break exé cuté e dans la premiè re suite termine la boucle sans exé cuter la suite de la clause else.
Une instruction continue exé cuté e dans la premiè re suite saute le reste de la suite et continue avec l’é lé ment suivant,
ou avec la clause else s’il n’y a pas d’é lé ment suivant.
La boucle for effectue des affectations aux variables de la liste cible, ce qui é crase toutes les affectations anté rieures
de ces variables, y compris celles effectué es dans la suite de la boucle for :
for i in range(10):
print(i)
i = 5 # this will not affect the for-loop
# because i will be overwritten with the next
# index in the range
Les noms dans la liste cible ne sont pas supprimé s lorsque la boucle est terminé e mais, si la sé quence est vide, ils
n’auront pas du tout é té assigné s par la boucle. Petite astuce : le type natif range() repré sente des suites arithmé tiques
immuables de nombres entiers ; par exemple, ité rer sur range(3) renvoie successivement les entiers 0, 1 et 2.
Modifié dans la version 3.11 : les é lé ments é toilé s sont maintenant autorisé s dans l’expression liste.
Vous trouvez des informations supplé mentaires relatives aux exceptions dans la section Exceptions et, dans la section
L’instruction raise, des informations relatives à l’utilisation de l’instruction raise pour produire des exceptions.
except E as N:
foo
except E as N:
try:
foo
finally:
del N
Cela veut dire que l’exception doit ê tre assigné e à un nom diffé rent pour pouvoir s’y ré fé rer aprè s la clause except.
Les exceptions sont effacé es parce qu’avec la trace de la pile d’appels qui leur est attaché e, elles cré ent un cycle dans
les pointeurs de ré fé rences (avec le cadre de la pile), ce qui conduit à conserver tous les noms locaux de ce cadre en
mé moire jusqu’au passage du ramasse-miettes.
Avant qu’une suite de clauses except ne soit exé cuté e, l’exception est stocké e dans le module sys, où elle est
accessible depuis le corps de la clause except en appelant [Link](). Lorsque vous quittez un gestionnaire
d’exceptions, l’exception stocké e dans le module sys est ré initialisé e à sa valeur pré cé dente :
>>> print([Link]())
None
>>> try:
... raise TypeError
... except:
... print(repr([Link]()))
... try:
... raise ValueError
... except:
... print(repr([Link]()))
... print(repr([Link]()))
...
TypeError()
ValueError()
TypeError()
>>> print([Link]())
None
After all except* clauses execute, the group of unhandled exceptions is merged with any exceptions that were raised
or re-raised from within except* clauses. This merged exception group propagates on. :
>>> try:
... raise ExceptionGroup("eg",
(suite sur la page suivante)
If the exception raised from the try block is not an exception group and its type matches one of the except* clauses,
it is caught and wrapped by an exception group with an empty message string. This ensures that the type of the target
e is consistently BaseExceptionGroup :
>>> try:
... raise BlockingIOError
... except* BlockingIOError as e:
... print(repr(e))
...
ExceptionGroup('', (BlockingIOError()))
L’information relative à l’exception n’est pas disponible pour le programme pendant l’exé cution de la clause finally.
Lorsqu’une instruction return, break ou continue est exé cuté e dans la suite d’une instruction try d’une construc-
tion try…finally, la clause finally est aussi exé cuté e « à la sortie ».
La valeur de retour d’une fonction est dé terminé e par la derniè re instruction return exé cuté e. Puisque la clause
finally s’exé cute toujours, une instruction return exé cuté e dans le finally sera toujours la derniè re clause
exé cuté e :
Modifié dans la version 3.8 : Avant Python 3.8, une instruction continue n’é tait pas licite dans une clause finally
en raison d’un problè me dans l’implé mentation.
with_stmt ::= "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" suite
with_stmt_contents ::= with_item ("," with_item)*
with_item ::= expression ["as" target]
L’exé cution de l’instruction with avec un seul « é lé ment » (item dans la grammaire) se dé roule comme suit :
1. L’expression de contexte (l’expression donné e dans le with_item) est é valué e pour obtenir un gestionnaire
de contexte.
2. The context manager’s __enter__() is loaded for later use.
3. The context manager’s __exit__() is loaded for later use.
4. The context manager’s __enter__() method is invoked.
5. If a target was included in the with statement, the return value from __enter__() is assigned to it.
® Note
The with statement guarantees that if the __enter__() method returns without an error, then
__exit__() will always be called. Thus, if an error occurs during the assignment to the target list,
it will be treated the same as an error occurring within the suite would be. See step 7 below.
manager = (EXPRESSION)
enter = type(manager).__enter__
exit = type(manager).__exit__
value = enter(manager)
hit_except = False
try:
TARGET = value
SUITE
except:
hit_except = True
if not exit(manager, *sys.exc_info()):
raise
finally:
if not hit_except:
exit(manager, None, None, None)
Avec plus d’un é lé ment, les gestionnaires de contexte sont traité s comme si plusieurs instructions with é taient im-
briqué es :
with A() as a:
with B() as b:
SUITE
Vous pouvez aussi é crire des gestionnaires de contexte sur plusieurs lignes pour plus d’un é lé ment si ceux-ci sont
placé s entre parenthè ses. Par exemple :
with (
A() as a,
B() as b,
):
SUITE
µ Voir aussi
® Note
cette section utilise les guillemets simples pour dé signer les mots-clés ad-hoc.
Le filtrage par motif prend un motif en entré e (pattern aprè s case) et un champ de recherche (subject_expr
aprè s match). Le motif du filtre (qui peut contenir des sous-motifs de filtrage) est confronté au contenu du champ
de recherche. La sortie est composé e de :
— un indicateur de ré ussite ou d’é chec pour le filtrage (on peut aussi dire que le motif a ré ussi ou é choué ) ;
— la possibilité de lier les valeurs filtré es à un nom. Les pré -requis sont indiqué s plus bas.
Les mots-clé s match et case sont des mots-clés ad-hoc.
µ Voir aussi
8.6.1 Aperçu
Voici un aperçu du dé roulement logique d’un filtrage par motif :
1. L’expression confronté e aux filtres, subject_expr, est é valué e pour obtenir la valeur ré sultante. Si l’expres-
sion contient une virgule, un n-uplet est construit en utilisant les rè gles classiques.
2. Chaque filtre des blocs case_block est confronté à la valeur ré sultante du champ de recherche. Les rè gles
particuliè res pour la ré ussite ou l’é chec sont dé crites plus bas. La confrontation du filtre peut aussi conduire à
lier un ou plusieurs noms pré sents dans le motif. Les rè gles pour lier les noms des motifs dé pendent du type
de filtre et sont dé crites plus bas. Le nommage effectué lors d’un filtrage par motif qui a réussi persiste
à l’extérieur du bloc et le nom peut être utilisé après l’instruction match.
® Note
en cas d’é chec de la recherche, certains sous-filtres peuvent avoir ré ussi. Ne vous fiez pas aux nommages
faits lors d’un filtrage qui a é choué . Inversement, ne vous fiez pas aux variables qui restent inchangé es
aprè s un filtrage infructueux. Le comportement exact dé pend de l’implé mentation et peut varier. Il s’agit
d’un choix intentionnel afin de permettre aux implé mentations d’ajouter des optimisations.
3. Si la recherche ré ussit, la garde correspondante (si elle existe) est é valué e. Dans ce cas, on est sû r que les
nommages ont bien eu lieu.
— Si la garde s’é value à vrai ou s’il n’y a pas de garde, le block à l’inté rieur du case_block est exé cuté .
— Sinon, le case_block est testé comme dé crit ci-dessus.
— S’il n’y a plus de bloc case_block, l’instruction est terminé e.
® Note
l’utilisateur ne doit jamais faire confiance à un filtre en cours d’é valuation. En fonction de l’implé mentation,
l’interpré teur peut mettre des valeurs en cache ou utiliser des optimisations qui é vitent des ré évaluations.
Dans cet exemple, if flag est une garde. Plus de dé tails sont fournis dans la prochaine section.
8.6.2 Gardes
guard ::= "if" named_expression
Une garde (guard qui fait partie du case) doit s’é valuer à vrai pour que le code à l’inté rieur du bloc case soit
exé cuté . Elle s’é crit sous la forme du mot-clé if suivi d’une expression.
Le dé roulement logique d’un bloc case qui comprend une garde est le suivant :
1. Vé rification que le filtrage dans le bloc case est fructueux. Si le filtrage é choue, la garde n’est pas é valué e et
on passe au bloc case suivant.
2. Si le filtrage est fructueux, é valuation de la garde.
— Si la garde s’é value à vrai, le bloc est sé lectionné .
— Si la garde s’é value à faux, le bloc n’est pas sé lectionné .
— Si une exception est levé e lors de l’é valuation de la garde, cette exception est propagé e.
Les gardes é tant des expressions, il est possible qu’elles aient des effets secondaires. L’ordre d’é valuation des gardes
est du premier au dernier bloc case, un à la fois, en sautant les blocs case dont la recherche de motif é chouent.
L’é valuation des gardes s’arrê te dè s qu’un bloc case est sé lectionné .
8.6.4 Filtres
® Note
Cette section utilise des notations grammaticales qui ne font pas partie du standard EBNF :
— la notation [Link]+ dé signe REGLE (SEP REGLE)*
— la notation !REGLE dé signe la né gation logique de l’assertion REGLE
| group_pattern
| sequence_pattern
| mapping_pattern
| class_pattern
Les explications ci-dessous dé crivent « en termes simples » ce qu’un modè le fait (merci à Raymond Hettinger pour
son document qui a inspiré la plupart des descriptions). Notez que ces descriptions sont purement à fin d’illustration
et peuvent ne pas ê tre strictement conformes à l’implé mentation sous-jacente. De plus, nous ne couvrons pas toutes
les formes valides.
Filtres OU
Un filtre OU est composé de deux filtres ou plus sé paré s par des barres verticales |. La syntaxe est :
Seul le dernier sous-filtre peut ê tre attrape-tout et chaque sous-filtre doit ê tre lié au mê me ensemble de noms pour
é viter toute ambigü ité .
Un filtre OU confronte chacun des sous-filtres à tour de rô le à la valeur du champ de recherche, jusqu’à ce que l’un
d’eux ré ussisse. Le filtre OU ré ussit si l’un des sous-filtres a ré ussi, sinon il é choue.
En termes plus simples, M1 | M2 | ... teste le filtre par motif M1, s’il é choue il teste le filtre par motif M2, ré ussit
immé diatement si l’un d’eux ré ussit, é choue dans le cas contraire.
Filtres AS
Un filtre AS confronte un filtre OU sur la gauche du mot-clé as au champ de recherche. La syntaxe est la suivante :
Si le filtre OU é choue, le filtre AS é choue. Sinon, le filtre AS lie le champ de recherche au nom sur la droite du
mot-clé as et ré ussit. capture_pattern ne peut pas ê tre un _.
En termes simples, M as NOM filtre avec le motif M et, s’il ré ussit, dé finit NOM = <subject>.
Filtres littéraux
Un filtre litté ral effectue une correspondance avec la plupart des littéraux en Python. La syntaxe est la suivante :
La rè gle strings et le lexè me NUMBER sont dé finis dans la grammaire de Python standard. Les chaînes avec triples
guillemets sont gé ré es. Les chaînes brutes et les chaînes d’octets sont gé ré es. Les f-strings ne sont pas gé ré es.
Les formes signed_number '+' NUMBER et signed_number '-' NUMBER permettent d’exprimer des nombres
complexes ; vous devez indiquer un nombre ré el sur la gauche et un nombre imaginaire sur la droite. Par exemple, 3
+ 4j.
En termes simples, LITERAL ré ussit seulement si <subject> == LITERAL. Pour les singletons None, True et
False, l’opé rateur is est utilisé .
Filtres de capture
Un filtre de capture lie la valeur du champ de recherche à un nom. La syntaxe est la suivante :
Un simple caractè re souligné _ n’est pas un filtre de capture (c’est ce que !'_' veut dire). C’est le motif pour dé signer
un filtre attrape-tout (lexè me wilcard_pattern, voir plus bas).
Dans un filtre donné , un nom ne peut ê tre lié qu’une seule fois. Par exemple, case x, x: ... est invalide mais
case [x] | x: ... est autorisé .
Les filtres de capture ré ussissent toujours. La porté e du lien est conforme aux rè gles dé finies pour l’opé rateur d’af-
fectation indiqué es dans la PEP 572 ; le nom devient une variable locale dans la fonction la plus inté rieure à moins
qu’il n’y ait une instruction global ou nonlocal qui s’applique.
En termes simples, NAME ré ussit toujours et dé finit NAME = <subject>.
Filtres attrape-tout
Un filtre attrape-tout ré ussit toujours (quel que soit le champ de recherche) et ne lie aucun nom. La syntaxe est la
suivante :
Le nom qualifié dans le filtre est recherché en utilisant la méthode de résolution des noms standard de Python. Le
filtrage ré ussit si la valeur trouvé e vé rifie l’é galité avec la valeur du champ de recherche (en utilisant l’opé rateur
d’é galité ==).
En termes plus simples, NOM1.NOM2 ré ussit seulement si <subject> == NOM1.NOM2
® Note
si la mê me valeur apparaît plusieurs fois dans la mê me instruction match, l’interpré teur peut mettre en cache
la premiè re valeur trouvé e et la ré utiliser plutô t que de refaire une recherche. Ce cache est strictement limité à
l’exé cution de l’instruction match donné e.
Filtres de groupes
Un filtre de groupe permet au programmeur de souligner l’intention de regrouper des motifs en plaçant ceux-ci entre
parenthè ses. À part ça, il n’introduit aucune syntaxe supplé mentaire. Sa syntaxe est la suivante :
Filtres de séquences
Un filtre de sé quence contient des sous-filtres par motif dont chacun doit correspondre à un é lé ment d’une sé quence.
La syntaxe est similaire au dé ballage d’une liste ou d’un n-uplet.
Vous pouvez utiliser indiffé remment des parenthè ses (...) ou des crochets [...] pour encadrer les filtres à re-
grouper.
® Note
un filtre seul entre parenthè ses qui ne se termine pas par une virgule (par exemple (3 | 4)) est un filtre de
groupe. En revanche, un filtre seul entre crochets (par exemple [3 | 4]) reste un filtre de sé quence.
Il peut y avoir au plus un sous-filtre é toilé (lexè me star_pattern) dans un filtre de sé quence. Le filtre é toilé peut
se trouver à n’importe quelle position. S’il n’y en a pas, le filtre de sé quence est un filtre de sé quence à longueur fixe,
sinon c’est un filtre de sé quence à longueur variable.
Voici le dé roulement logique d’un filtrage par motif de sé quence sur une valeur du champ de recherche :
1. Si la valeur du champ de recherche n’est pas une sé quence 2 , le filtre de sé quence é choue.
2. Si la valeur du champ de recherche est une instance de str, bytes ou bytearray, le filtre de sé quence
é choue.
3. Les é tapes suivantes dé pendent de la longueur fixe ou non du filtre de sé quence.
Si le filtre de sé quence est de longueur fixe :
1. Si la longueur de la sé quence champ de recherche n’est pas é gale au nombre de sous-filtres, le filtre de
sé quence é choue.
2. Les sous-filtres de la sé quence sont confronté s aux é lé ments correspondants dans la sé quence champ de re-
cherche, de la gauche vers la droite. La recherche de correspondance s’arrê te dè s qu’un sous-filtre é choue.
Si tous les sous-filtres ré ussissent la confrontation à l’é lé ment du champ de recherche correspondant, le
filtre de sé quence ré ussit.
Sinon, si le filtre de sé quence est de longueur variable :
1. Si la longueur de la sé quence champ de recherche est plus petite que le nombre de sous-filtres sans é toile,
le filtre de sé quence é choue.
2. Les sous-filtres sans é toile du dé but sont confronté s aux é lé ments correspondants comme pour un filtre
de sé quences de longueur fixe.
3. Si les é tapes pré cé dentes ont ré ussi, le sous-filtre é toilé correspond à une liste formé e des é lé ments restants
du champ de recherche, en excluant les é lé ments restants qui correspondent à des sous-filtres sans é toile
qui suivent le sous-filtre é toilé .
4. Les sous-filtres sans é toile qui restent sont confronté s aux é lé ments restants du champ de recherche,
comme pour un filtre de sé quences de longueur fixe.
2. Dans le filtrage par motif, une sé quence est dé finie comme suit :
— une classe qui hé rite de [Link]
— une classe Python qui a é té enregistré e en tant que [Link]
— une classe native dont le bit (CPython) Py_TPFLAGS_SEQUENCE est à 1
— une classe qui hé rite d’une classe cité e ci-dessus
Les classes suivantes de la bibliothè que standard sont des sé quences :
— [Link]
— [Link]
— list
— memoryview
— range
— tuple
® Note
Les champs de recherche du type str, bytes et bytearray ne correspondent pas avec des filtres de sé quence.
® Note
la longueur de la sé quence champ de recherche est obtenue par len() (c.-à -d. avec le protocole
__len__()). Cette longueur peut ê tre mise en cache par l’interpré teur de la mê me maniè re que pour
les filtres par valeur.
En termes plus simples, [M1, M2, M3, … , M<N>] ré ussit seulement si tout ce qui suit a lieu :
— vé rification que <subject> est une sé quence,
— len(subject) == <N>,
— M1 correspond à <subject>[0] (notez que cette correspondance peut lier des noms),
— M2 correspond à <subject>[1] (notez que cette correspondance peut lier des noms),
— et ainsi de suite pour chaque filtre par motif / é lé ment.
Filtres associatifs
Un filtre associatif contient un ou plusieurs motifs clé -valeur. La syntaxe est similaire à la construction d’un diction-
naire :
Un seul sous-filtre doublement é toilé peut ê tre pré sent dans le filtre associatif. Le filtre doublement é toilé doit ê tre le
dernier sous-filtre du filtre associatif.
Il est interdit d’avoir des clé s en double dans les filtres associatifs. Une clé en double sous forme litté rale lè ve une
Syntax Error. Deux clé s qui ont la mê me valeur lè vent une ValueError à l’exé cution.
Voici le dé roulement d’un filtrage associatif sur la valeur du champ de recherche :
1. Si la valeur du champ de recherche n’est pas un tableau associatif 3 , le filtre associatif é choue.
2. Si chaque clé donné e dans le filtre associatif est pré sente dans le tableau associatif du champ de recherche,
et que le filtre pour chaque clé correspond aux é lé ments du tableau associatif champ de recherche, le filtre
associatif ré ussit.
3. Si des clé s identiques sont dé tecté es dans le filtre par motif, le filtre est dé claré invalide. Une SyntaxError
est levé e pour les valeurs litté rales dupliqué es ou une ValueError pour des clé s s’é valuant à la mê me valeur.
® Note
Key-value pairs are matched using the two-argument form of the mapping subject’s get() method. Matched
key-value pairs must already be present in the mapping, and not created on-the-fly via __missing__() or
__getitem__().
En termes simples, {CLÉ1: M1, CLÉ2: M2, ... } ré ussit seulement si tout ce qui suit a lieu :
— vé rification que <subject> est un tableau associatif,
— CLÉ1 in <subject>,
— M1 correspond à <subject>[CLÉ1],
— et ainsi de suite pour chaque paire CLÉ/Motif.
3. Dans le filtrage par motif, un tableau associatif est dé fini comme suit :
— une classe qui hé rite de [Link]
— une classe Python qui a é té enregistré e en tant que [Link]
— une classe native dont le bit (CPython) Py_TPFLAGS_MAPPING est à 1
— une classe qui hé rite d’une classe cité e ci-dessus
Les classes dict et [Link] de la bibliothè que standard sont des tableaux associatifs.
Filtres de classes
Un filtre de classe repré sente une classe et ses arguments positionnels et par mots-clé s (s’il y en a). La syntaxe est la
suivante :
Le mê me mot-clé ne doit pas ê tre ré pé té dans les filtres de classes.
Voici le dé roulement d’un filtrage de classe sur la valeur du champ de recherche :
1. Si name_or_attr n’est pas une instance de la classe native type, lè ve une TypeError.
2. Si la valeur du champ de recherche n’est pas une instance de name_or_attr (testé via isinstance()), le
filtre de classe é choue.
3. S’il n’y a pas d’argument au filtre, le filtre ré ussit. Sinon, les é tapes suivantes dé pendent de la pré sence ou non
de motifs pour les arguments positionnels ou par mot-clé .
Pour un certain nombre de types natifs (indiqué s ci-dessous), un motif positionnel seul est accepté , qui est
confronté au champ de recherche en entier ; pour ces types, les motifs par mots-clé s fonctionnent comme les
autres types.
S’il n’y a que des motifs par mot-clé (NdT : dans le sens « argument par mot-clé »), ils sont é valué s comme
ceci, un par un :
I. Le mot-clé est recherché en tant qu’attribut du champ de recherche.
— Si cela lè ve une exception autre que AttributeError, l’exception est propagé e vers le haut.
— Si cela lè ve l’exception AttributeError, le filtre é choue.
— Sinon, le motif associé au mot-clé est confronté à la valeur de l’attribut du champ de recherche. Si cela
é choue, le filtre de classe é choue ; si cela ré ussit, le filtre passe au mot-clé suivant.
II. Si tous les motifs par mot-clé ont ré ussi, le filtre de classe ré ussit.
Si des motifs positionnels sont pré sents, ils sont convertis en motifs par mot-clé en utilisant l’attribut
__match_args__ de la classe name_or_attr avant le filtrage :
µ Voir aussi
II. Une fois que tous les motifs positionnels ont été convertis en motifs par mot-clé,
le filtre se dé roule comme si tous les motifs é taient des motifs par mots-clé s.
Pour les types natifs suivants, le traitement des motifs positionnels est diffé rent :
— bool
— bytearray
— bytes
— dict
— float
— frozenset
— int
— list
— set
— str
— tuple
Ces classes acceptent un argument positionnel seul et le filtre s’applique alors sur l’ensemble de l’objet plutô t
que sur un simple attribut. Par exemple, int(0|1) ré ussit lorsqu’il est confronté à la valeur 0, mais pas
lorsque c’est la valeur 0.0.
En termes simples, CLS(P1, attr=P2) ré ussit seulement si la sé quence suivante est dé roulé e :
— isinstance(<subject>, CLS)
— convertit P1 vers un motif par mot-clé en utilisant CLS.__match_args__
— Pour chaque argument par mot-clé attr=P2 :
— hasattr(<subject>, "attr")
— P2 correspond à <subject>.attr
— … et ainsi de suite pour les paires motif/argument par mot-clé .
µ Voir aussi
Une dé finition de fonction est une instruction qui est exé cuté e. Son exé cution lie le nom de la fonction, dans l’espace
de nommage local courant, à un objet fonction (un objet qui encapsule le code exé cutable de la fonction). Cet objet
fonction contient une ré fé rence à l’espace des noms globaux courant comme espace des noms globaux à utiliser lorsque
la fonction est appelé e.
La dé finition de la fonction n’exé cute pas le corps de la fonction ; elle n’est exé cuté e que lorsque la fonction est
appelé e. 4
Une dé finition de fonction peut ê tre encapsulé e dans une ou plusieurs expressions decorator ; les dé corateurs sont
é valué s lorsque la fonction est dé finie, dans la porté e qui contient la dé finition de fonction ; le ré sultat doit ê tre un
appelable, qui est invoqué avec l’objet fonction comme seul argument ; la valeur renvoyé e est lié e au nom de la fonction
en lieu et place de l’objet fonction. Lorsqu’il y a plusieurs dé corateurs, ils sont appliqué s par imbrication ; par exemple,
le code suivant :
4. A string literal appearing as the first statement in the function body is transformed into the function’s __doc__ attribute and therefore the
function’s docstring.
@f1(arg)
@f2
def func(): pass
sauf que la fonction originale n’est pas temporairement lié e au nom func.
Modifié dans la version 3.9 : les fonctions peuvent ê tre dé coré es par toute expression d'affectation valide.
Auparavant, la grammaire é tait beaucoup plus restrictive ; voir la PEP 614 pour obtenir les dé tails.
A list of type parameters may be given in square brackets between the function’s name and the opening parenthesis for
its parameter list. This indicates to static type checkers that the function is generic. At runtime, the type parameters
can be retrieved from the function’s __type_params__ attribute. See Generic functions for more.
Modifié dans la version 3.12 : Type parameter lists are new in Python 3.12.
Lorsqu’un ou plusieurs paramètres sont de la forme parameter = expression, on dit que la fonction a des « valeurs
de paramè tres par dé faut ». Pour un paramè tre avec une valeur par dé faut, l’argument correspondant peut ê tre omis
lors de l’appel, la valeur par dé faut du paramè tre est alors utilisé e. Si un paramè tre a une valeur par dé faut, tous les
paramè tres suivants jusqu’à ”*” doivent aussi avoir une valeur par dé faut — ceci est une restriction syntaxique qui
n’est pas exprimé e dans la grammaire.
Les valeurs par défaut des paramètres sont évaluées de la gauche vers la droite quand la définition de la
fonction est exécutée. Cela signifie que l’expression est é valué e une fois, lorsque la fonction est dé finie, et que c’est la
mê me valeur « pré -calculé e » qui est utilisé e à chaque appel. C’est particuliè rement important à comprendre lorsque
la valeur d’un paramè tre par dé faut est un objet mutable (cas d’une liste ou un dictionnaire par exemple) : si la fonction
modifie l’objet (par exemple en ajoutant un é lé ment à une liste), la valeur par dé faut est modifié e. En gé né ral, ce n’est
pas l’effet voulu. Une façon d’é viter cet é cueil est d’utiliser None par dé faut et de tester explicitement la valeur dans
le corps de la fonction. Par exemple :
def whats_on_the_telly(penguin=None):
if penguin is None:
penguin = []
[Link]("property of the zoo")
return penguin
La sé mantique de l’appel de fonction est dé crite plus en dé tail dans la section Appels. Un appel de fonction assigne
toujours des valeurs à tous les paramè tres mentionné s dans la liste des paramè tres, soit à partir d’arguments posi-
tionnels, d’arguments par mots-clé s ou de valeurs par dé faut. S’il y a un paramè tre de la forme *identifier, il est
initialisé à un n-uplet recevant les paramè tres positionnels en surplus, la valeur par dé faut é tant le n-uplet vide. S’il y a
un paramè tre de la forme **identifier, il est initialisé à un nouveau tableau associatif ordonné qui ré cupè re tous
les arguments par mot-clé en surplus, la valeur par dé faut é tant un tableau associatif vide du mê me type. Les para-
mè tres aprè s * ou *identifier sont forcé ment des paramè tres par mot-clé et ne peuvent ê tre passé s qu’en utilisant
des arguments par mot-clé . Au contraire, ceux avant / ne peuvent ê tre passé s qu’avec des arguments positionnels.
Modifié dans la version 3.8 : ajout de la syntaxe avec / pour indiquer les paramè tre exclusivement positionnels (voir
la PEP 570).
Parameters may have an annotation of the form ”: expression” following the parameter name. Any parameter
may have an annotation, even those of the form *identifier or **identifier. (As a special case, parameters
of the form *identifier may have an annotation ”: *expression”.) Functions may have ”return” annotation
of the form ”-> expression” after the parameter list. These annotations can be any valid Python expression. The
presence of annotations does not change the semantics of a function. The annotation values are available as values
of a dictionary keyed by the parameters’ names in the __annotations__ attribute of the function object. If the
annotations import from __future__ is used, annotations are preserved as strings at runtime which enables
postponed evaluation. Otherwise, they are evaluated when the function definition is executed. In this case annotations
may be evaluated in a different order than they appear in the source code.
Modifié dans la version 3.11 : Parameters of the form ”*identifier” may have an annotation ”: *expression”.
See PEP 646.
Il est aussi possible de cré er des fonctions anonymes (fonctions non lié es à un nom), pour une utilisation immé diate
dans des expressions. Utilisez alors des expressions lambda, dé crites dans la section Expressions lambda. Notez qu’une
expression lambda est simplement un raccourci pour dé finir une fonction simple ; une fonction dé finie par une ins-
truction ”def ” peut ê tre passé e (en argument) ou assigné e à un autre nom, tout comme une fonction dé finie par une
expression lambda. La forme ”def” est en fait plus puissante puisqu’elle permet l’exé cution de plusieurs instructions
et les annotations.
Note pour les programmeurs : les fonctions sont des objets de premiè re classe. Une instruction ”def” exé cuté e à
l’inté rieur d’une dé finition de fonction dé finit une fonction locale qui peut ê tre renvoyé e ou passé e en tant qu’argument.
Les variables libres utilisé es dans la fonction imbriqué e ont accè s aux variables locales de la fonction contenant le
”def”. Voir la section Noms et liaisons pour plus de dé tails.
µ Voir aussi
Une dé finition de classe est une instruction qui est exé cuté e. La liste d’hé ritage (inheritance entre crochets dans la
grammaire ci-dessus) donne habituellement une liste de classes mè res (voir Métaclasses pour des utilisations plus
avancé es). Donc chaque é lé ment de la liste doit pouvoir ê tre é valué comme un objet classe qui autorise les sous-
classes. Les classes sans liste d’hé ritage hé ritent, par dé faut, de la classe mè re object ; d’où :
class Foo:
pass
est é quivalente à :
class Foo(object):
pass
La suite de la classe est ensuite exé cuté e dans un nouveau cadre d’exé cution (voir Noms et liaisons), en utilisant un
espace de nommage local nouvellement cré é et l’espace de nommage global d’origine (habituellement, la suite contient
principalement des dé finitions de fonctions). Lorsque la suite de la classe termine son exé cution, son cadre d’exé cution
est abandonné mais son espace des noms locaux est sauvegardé 5 . Un objet classe est alors cré é en utilisant la liste
5. A string literal appearing as the first statement in the class body is transformed into the namespace’s __doc__ item and therefore the class’s
docstring.
d’hé ritage pour les classes mè res et l’espace de nommage sauvegardé comme dictionnaire des attributs. Le nom de
classe est lié à l’objet classe dans l’espace de nommage local original.
The order in which attributes are defined in the class body is preserved in the new class’s __dict__. Note that this
is reliable only right after the class is created and only for classes that were defined using the definition syntax.
La cré ation de classes peut ê tre fortement personnalisé e en utilisant les métaclasses.
Les classes peuvent aussi ê tre dé coré es. Comme pour les dé corateurs de fonctions :
@f1(arg)
@f2
class Foo: pass
Les rè gles d’é valuation pour les expressions de dé corateurs sont les mê mes que pour les dé corateurs de fonctions. Le
ré sultat est alors lié au nom de la classe.
Modifié dans la version 3.9 : les classes peuvent ê tre dé coré es par toute expression d'affectation valide.
Auparavant, la grammaire é tait beaucoup plus restrictive ; voir la PEP 614 pour obtenir les dé tails.
A list of type parameters may be given in square brackets immediately after the class’s name. This indicates to
static type checkers that the class is generic. At runtime, the type parameters can be retrieved from the class’s
__type_params__ attribute. See Generic classes for more.
Modifié dans la version 3.12 : Type parameter lists are new in Python 3.12.
Note pour les programmeurs : les variables dé finies dans la dé finition de classe sont des attributs de classe ; elles sont
partagé es par les instances. Les attributs d’instance peuvent ê tre dé finis dans une mé thode en utilisant [Link] =
value. Les attributs de classe et d’instance sont accessibles par la notation ”[Link]”, et un attribut d’instance
masque un attribut de classe de mê me nom lorsqu’on y accè de de cette façon. Les attributs de classe peuvent ê tre
utilisé s comme valeurs par dé faut pour les attributs d’instances, mais l’utilisation de valeurs mutables peut conduire
à des ré sultats inattendus. Les descripteurs peuvent ê tre utilisé s pour cré er des variables d’instances avec des dé tails
d’implé mentation diffé rents.
µ Voir aussi
8.9 Coroutines
Ajouté dans la version 3.5.
L’exé cution de coroutines Python peut ê tre suspendue et reprise à plusieurs endroits (voir coroutine). Les expressions
await, async for et async with ne peuvent ê tre utilisé es que dans les corps de coroutines.
Les fonctions dé finies avec la syntaxe async def sont toujours des fonctions coroutines, mê me si elles ne contiennent
aucun mot-clé await ou async.
C’est une SyntaxError d’utiliser une expression yield from dans une coroutine.
Un exemple de fonction coroutine :
Modifié dans la version 3.7 : await et async sont doré navant des mots-clé s ; auparavant, ils n’é taient traité s comme
tels que dans le corps d’une fonction coroutine.
Un itérable asynchrone fournit une mé thode __aiter__ qui renvoie directement un itérateur asynchrone, celui-ci
pouvant appeler du code asynchrone dans sa mé thode __anext__.
L’instruction async for permet d’ité rer facilement sur des ité rables asynchrones.
Le code suivant :
iter = (ITER)
iter = type(iter).__aiter__(iter)
running = True
while running:
try:
TARGET = await type(iter).__anext__(iter)
except StopAsyncIteration:
running = False
else:
SUITE
else:
SUITE2
Un gestionnaire de contexte asynchrone est un gestionnaire de contexte qui est capable de suspendre l’exé cution dans
ses mé thodes enter et exit.
Le code suivant :
manager = (EXPRESSION)
aenter = type(manager).__aenter__
aexit = type(manager).__aexit__
value = await aenter(manager)
hit_except = False
try:
TARGET = value
SUITE
except:
hit_except = True
if not await aexit(manager, *sys.exc_info()):
raise
finally:
if not hit_except:
await aexit(manager, None, None, None)
µ Voir aussi
class Bag[T]:
def __iter__(self) -> Iterator[T]:
...
Semantically, this indicates that the function, class, or type alias is generic over a type variable. This information is
primarily used by static type checkers, and at runtime, generic objects behave much like their non-generic counter-
parts.
Type parameters are declared in square brackets ([]) immediately after the name of the function, class, or type alias.
The type parameters are accessible within the scope of the generic object, but not elsewhere. Thus, after a declaration
def func[T](): pass, the name T is not available in the module scope. Below, the semantics of generic objects
are described with more precision. The scope of type parameters is modeled with a special function (technically, an
annotation scope) that wraps the creation of the generic object.
Generic functions, classes, and type aliases have a __type_params__ attribute listing their type parameters.
Type parameters come in three kinds :
— [Link], introduced by a plain name (e.g., T). Semantically, this represents a single type to a type
checker.
— [Link], introduced by a name prefixed with a single asterisk (e.g., *Ts). Semantically, this
stands for a tuple of any number of types.
— [Link], introduced by a name prefixed with two asterisks (e.g., **P). Semantically, this stands
for the parameters of a callable.
[Link] declarations can define bounds and constraints with a colon (:) followed by an expression. A single
expression after the colon indicates a bound (e.g. T: int). Semantically, this means that the [Link] can
only represent types that are a subtype of this bound. A parenthesized tuple of expressions after the colon indicates a
set of constraints (e.g. T: (str, bytes)). Each member of the tuple should be a type (again, this is not enforced
at runtime). Constrained type variables can only take on one of the types in the list of constraints.
For [Link] declared using the type parameter list syntax, the bound and constraints are not evaluated
when the generic object is created, but only when the value is explicitly accessed through the attributes __bound__
and __constraints__. To accomplish this, the bounds or constraints are evaluated in a separate annotation scope.
[Link] and [Link] cannot have bounds or constraints.
All three flavors of type parameters can also have a default value, which is used when the type parameter is not
explicitly provided. This is added by appending a single equals sign (=) followed by an expression. Like the bounds
and constraints of type variables, the default value is not evaluated when the object is created, but only when the type
parameter’s __default__ attribute is accessed. To this end, the default value is evaluated in a separate annotation
scope. If no default value is specified for a type parameter, the __default__ attribute is set to the special sentinel
object [Link].
The following example indicates the full set of allowed type parameter declarations :
def overly_generic[
SimpleTypeVar,
TypeVarWithDefault = int,
TypeVarWithBound: int,
TypeVarWithConstraints: (str, bytes),
*SimpleTypeVarTuple = (int, float),
**SimpleParamSpec = (str, bytearray),
](
a: SimpleTypeVar,
b: TypeVarWithDefault,
c: TypeVarWithBound,
d: Callable[SimpleParamSpec, TypeVarWithConstraints],
*e: SimpleTypeVarTuple,
): ...
annotation-def TYPE_PARAMS_OF_func():
T = [Link]("T")
def func(arg: T): ...
func.__type_params__ = (T,)
return func
func = TYPE_PARAMS_OF_func()
Here annotation-def indicates an annotation scope, which is not actually bound to any name at runtime. (One
other liberty is taken in the translation : the syntax does not go through attribute access on the typing module, but
creates an instance of [Link] directly.)
The annotations of generic functions are evaluated within the annotation scope used for declaring the type parameters,
but the function’s defaults and decorators are not.
The following example illustrates the scoping rules for these cases, as well as for additional flavors of type parameters :
@decorator
def func[T: int, *Ts, **P](*args: *Ts, arg: Callable[P, T] = some_default):
...
Except for the lazy evaluation of the TypeVar bound, this is equivalent to :
DEFAULT_OF_arg = some_default
annotation-def TYPE_PARAMS_OF_func():
annotation-def BOUND_OF_T():
return int
# In reality, BOUND_OF_T() is evaluated only on demand.
T = [Link]("T", bound=BOUND_OF_T())
Ts = [Link]("Ts")
P = [Link]("P")
The capitalized names like DEFAULT_OF_arg are not actually bound at runtime.
annotation-def TYPE_PARAMS_OF_Bag():
T = [Link]("T")
class Bag([Link][T]):
__type_params__ = (T,)
...
return Bag
Bag = TYPE_PARAMS_OF_Bag()
Here again annotation-def (not a real keyword) indicates an annotation scope, and the name
TYPE_PARAMS_OF_Bag is not actually bound at runtime.
Generic classes implicitly inherit from [Link]. The base classes and keyword arguments of generic
classes are evaluated within the type scope for the type parameters, and decorators are evaluated outside that scope.
This is illustrated by this example :
@decorator
class Bag(Base[T], arg=T): ...
This is equivalent to :
annotation-def TYPE_PARAMS_OF_Bag():
T = [Link]("T")
class Bag(Base[T], [Link][T], arg=T):
__type_params__ = (T,)
...
return Bag
Bag = decorator(TYPE_PARAMS_OF_Bag())
annotation-def TYPE_PARAMS_OF_ListOrSet():
T = [Link]("T")
annotation-def VALUE_OF_ListOrSet():
return list[T] | set[T]
# In reality, the value is lazily evaluated
return [Link]("ListOrSet", VALUE_OF_ListOrSet(), type_params=(T,
,→))
ListOrSet = TYPE_PARAMS_OF_ListOrSet()
Here, annotation-def (not a real keyword) indicates an annotation scope. The capitalized names like
TYPE_PARAMS_OF_ListOrSet are not actually bound at runtime.
Notes
L’entré e de l’interpré teur Python peut provenir d’un certain nombre de sources : d’un script passé en entré e standard
ou en argument de programme, tapé e de maniè re interactive, à partir d’un fichier source de module, etc. Ce chapitre
donne la syntaxe utilisé e dans ces diffé rents cas.
135
The Python Language Reference, Version 3.13.7
Notez qu’une instruction composé e (de niveau supé rieur) doit ê tre suivie d’une ligne blanche en mode interactif ; c’est
né cessaire pour aider l’analyseur à dé tecter la fin de l’entré e.
Ceci est la grammaire complè te de Python, issue directement de la grammaire utilisé e pour gé né rer l’analyseur
syntaxique CPython (voir Grammar/[Link]). La version ci-dessous ne comprend pas les dé tails relatifs à la
gé né ration de code et la reprise sur erreur.
The notation is a mixture of EBNF and PEG. In particular, & followed by a symbol, token or parenthesized group
indicates a positive lookahead (i.e., is required to match but not consumed), while ! indicates a negative lookahead
(i.e., is required not to match). We use the | separator to mean PEG’s ”ordered choice” (written as / in traditional
PEG grammars). See PEP 617 for more details on the grammar’s syntax.
137
The Python Language Reference, Version 3.13.7
# STARTING RULES
# ==============
# GENERAL STATEMENTS
# ==================
statements: statement+
statement_newline:
| compound_stmt NEWLINE
| simple_stmts
| NEWLINE
| ENDMARKER
compound_stmt:
| function_def
| if_stmt
| class_def
| with_stmt
| for_stmt
| try_stmt
| while_stmt
| match_stmt
# SIMPLE STATEMENTS
# =================
# NOTE: annotated_rhs may start with 'yield'; yield_expr must start with 'yield'
assignment:
| NAME ':' expression ['=' annotated_rhs ]
| ('(' single_target ')'
| single_subscript_attribute_target) ':' expression ['=' annotated_rhs ]
| (star_targets '=' )+ (yield_expr | star_expressions) !'=' [TYPE_COMMENT]
| single_target augassign ~ (yield_expr | star_expressions)
augassign:
| '+='
| '-='
| '*='
| '@='
| '/='
| '%='
| '&='
| '|='
| '^='
| '<<='
(suite sur la page suivante)
139
The Python Language Reference, Version 3.13.7
return_stmt:
| 'return' [star_expressions]
raise_stmt:
| 'raise' expression ['from' expression ]
| 'raise'
del_stmt:
| 'del' del_targets &(';' | NEWLINE)
yield_stmt: yield_expr
import_stmt:
| import_name
| import_from
# Import statements
# -----------------
# COMPOUND STATEMENTS
# ===================
# Common elements
# ---------------
# Class definitions
# -----------------
class_def:
| decorators class_def_raw
| class_def_raw
class_def_raw:
| 'class' NAME [type_params] ['(' [arguments] ')' ] ':' block
# Function definitions
# --------------------
function_def:
| decorators function_def_raw
| function_def_raw
function_def_raw:
| 'def' NAME [type_params] '(' [params] ')' ['->' expression ] ':' [func_type_
,→comment] block
| 'async' 'def' NAME [type_params] '(' [params] ')' ['->' expression ] ':'␣
,→[func_type_comment] block
# Function parameters
# -------------------
params:
| parameters
parameters:
| slash_no_default param_no_default* param_with_default* [star_etc]
| slash_with_default param_with_default* [star_etc]
| param_no_default+ param_with_default* [star_etc]
| param_with_default+ [star_etc]
| star_etc
slash_no_default:
| param_no_default+ '/' ','
| param_no_default+ '/' &')'
slash_with_default:
| param_no_default* param_with_default+ '/' ','
| param_no_default* param_with_default+ '/' &')'
star_etc:
| '*' param_no_default param_maybe_default* [kwds]
| '*' param_no_default_star_annotation param_maybe_default* [kwds]
| '*' ',' param_maybe_default+ [kwds]
(suite sur la page suivante)
141
The Python Language Reference, Version 3.13.7
kwds:
| '**' param_no_default
param_no_default:
| param ',' TYPE_COMMENT?
| param TYPE_COMMENT? &')'
param_no_default_star_annotation:
| param_star_annotation ',' TYPE_COMMENT?
| param_star_annotation TYPE_COMMENT? &')'
param_with_default:
| param default ',' TYPE_COMMENT?
| param default TYPE_COMMENT? &')'
param_maybe_default:
| param default? ',' TYPE_COMMENT?
| param default? TYPE_COMMENT? &')'
param: NAME annotation?
param_star_annotation: NAME star_annotation
annotation: ':' expression
star_annotation: ':' star_expression
default: '=' expression | invalid_default
# If statement
# ------------
if_stmt:
| 'if' named_expression ':' block elif_stmt
| 'if' named_expression ':' block [else_block]
elif_stmt:
| 'elif' named_expression ':' block elif_stmt
| 'elif' named_expression ':' block [else_block]
else_block:
| 'else' ':' block
# While statement
# ---------------
while_stmt:
| 'while' named_expression ':' block [else_block]
# For statement
# -------------
(suite sur la page suivante)
for_stmt:
| 'for' star_targets 'in' ~ star_expressions ':' [TYPE_COMMENT] block [else_
,→block]
# With statement
# --------------
with_stmt:
| 'with' '(' ','.with_item+ ','? ')' ':' [TYPE_COMMENT] block
| 'with' ','.with_item+ ':' [TYPE_COMMENT] block
| 'async' 'with' '(' ','.with_item+ ','? ')' ':' block
| 'async' 'with' ','.with_item+ ':' [TYPE_COMMENT] block
with_item:
| expression 'as' star_target &(',' | ')' | ':')
| expression
# Try statement
# -------------
try_stmt:
| 'try' ':' block finally_block
| 'try' ':' block except_block+ [else_block] [finally_block]
| 'try' ':' block except_star_block+ [else_block] [finally_block]
# Except statement
# ----------------
except_block:
| 'except' expression ['as' NAME ] ':' block
| 'except' ':' block
except_star_block:
| 'except' '*' expression ['as' NAME ] ':' block
finally_block:
| 'finally' ':' block
# Match statement
# ---------------
match_stmt:
| "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
subject_expr:
| star_named_expression ',' star_named_expressions?
| named_expression
case_block:
| "case" patterns guard? ':' block
patterns:
(suite sur la page suivante)
143
The Python Language Reference, Version 3.13.7
pattern:
| as_pattern
| or_pattern
as_pattern:
| or_pattern 'as' pattern_capture_target
or_pattern:
| '|'.closed_pattern+
closed_pattern:
| literal_pattern
| capture_pattern
| wildcard_pattern
| value_pattern
| group_pattern
| sequence_pattern
| mapping_pattern
| class_pattern
complex_number:
| signed_real_number '+' imaginary_number
| signed_real_number '-' imaginary_number
signed_number:
| NUMBER
| '-' NUMBER
signed_real_number:
| real_number
| '-' real_number
real_number:
| NUMBER
capture_pattern:
| pattern_capture_target
pattern_capture_target:
| !"_" NAME !('.' | '(' | '=')
wildcard_pattern:
| "_"
value_pattern:
| attr !('.' | '(' | '=')
attr:
| name_or_attr '.' NAME
name_or_attr:
| attr
| NAME
group_pattern:
| '(' pattern ')'
sequence_pattern:
| '[' maybe_sequence_pattern? ']'
| '(' open_sequence_pattern? ')'
open_sequence_pattern:
| maybe_star_pattern ',' maybe_sequence_pattern?
maybe_sequence_pattern:
| ','.maybe_star_pattern+ ','?
maybe_star_pattern:
| star_pattern
| pattern
star_pattern:
| '*' pattern_capture_target
| '*' wildcard_pattern
mapping_pattern:
| '{' '}'
| '{' double_star_pattern ','? '}'
| '{' items_pattern ',' double_star_pattern ','? '}'
| '{' items_pattern ','? '}'
items_pattern:
| ','.key_value_pattern+
key_value_pattern:
| (literal_expr | attr) ':' pattern
double_star_pattern:
(suite sur la page suivante)
145
The Python Language Reference, Version 3.13.7
class_pattern:
| name_or_attr '(' ')'
| name_or_attr '(' positional_patterns ','? ')'
| name_or_attr '(' keyword_patterns ','? ')'
| name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'
positional_patterns:
| ','.pattern+
keyword_patterns:
| ','.keyword_pattern+
keyword_pattern:
| NAME '=' pattern
# Type statement
# ---------------
type_alias:
| "type" NAME [type_params] '=' expression
type_params:
| '[' type_param_seq ']'
type_param:
| NAME [type_param_bound] [type_param_default]
| '*' NAME [type_param_starred_default]
| '**' NAME [type_param_default]
# EXPRESSIONS
# -----------
expressions:
| expression (',' expression )+ [',']
| expression ','
| expression
expression:
| disjunction 'if' disjunction 'else' expression
| disjunction
| lambdef
yield_expr:
| 'yield' 'from' expression
| 'yield' [star_expressions]
(suite sur la page suivante)
star_expressions:
| star_expression (',' star_expression )+ [',']
| star_expression ','
| star_expression
star_expression:
| '*' bitwise_or
| expression
star_named_expression:
| '*' bitwise_or
| named_expression
assignment_expression:
| NAME ':=' ~ expression
named_expression:
| assignment_expression
| expression !':='
disjunction:
| conjunction ('or' conjunction )+
| conjunction
conjunction:
| inversion ('and' inversion )+
| inversion
inversion:
| 'not' inversion
| comparison
# Comparison operators
# --------------------
comparison:
| bitwise_or compare_op_bitwise_or_pair+
| bitwise_or
compare_op_bitwise_or_pair:
| eq_bitwise_or
| noteq_bitwise_or
| lte_bitwise_or
| lt_bitwise_or
| gte_bitwise_or
| gt_bitwise_or
| notin_bitwise_or
| in_bitwise_or
| isnot_bitwise_or
| is_bitwise_or
147
The Python Language Reference, Version 3.13.7
# Bitwise operators
# -----------------
bitwise_or:
| bitwise_or '|' bitwise_xor
| bitwise_xor
bitwise_xor:
| bitwise_xor '^' bitwise_and
| bitwise_and
bitwise_and:
| bitwise_and '&' shift_expr
| shift_expr
shift_expr:
| shift_expr '<<' sum
| shift_expr '>>' sum
| sum
# Arithmetic operators
# --------------------
sum:
| sum '+' term
| sum '-' term
| term
term:
| term '*' factor
| term '/' factor
| term '//' factor
| term '%' factor
| term '@' factor
| factor
factor:
| '+' factor
| '-' factor
| '~' factor
| power
power:
| await_primary '**' factor
| await_primary
await_primary:
| 'await' primary
| primary
primary:
| primary '.' NAME
| primary genexp
| primary '(' [arguments] ')'
| primary '[' slices ']'
| atom
slices:
| slice !','
| ','.(slice | starred_expression)+ [',']
slice:
| [expression] ':' [expression] [':' [expression] ]
| named_expression
atom:
| NAME
| 'True'
| 'False'
| 'None'
| strings
| NUMBER
| (tuple | group | genexp)
| (list | listcomp)
| (dict | set | dictcomp | setcomp)
| '...'
group:
| '(' (yield_expr | named_expression) ')'
# Lambda functions
# ----------------
lambdef:
| 'lambda' [lambda_params] ':' expression
lambda_params:
| lambda_parameters
149
The Python Language Reference, Version 3.13.7
lambda_slash_no_default:
| lambda_param_no_default+ '/' ','
| lambda_param_no_default+ '/' &':'
lambda_slash_with_default:
| lambda_param_no_default* lambda_param_with_default+ '/' ','
| lambda_param_no_default* lambda_param_with_default+ '/' &':'
lambda_star_etc:
| '*' lambda_param_no_default lambda_param_maybe_default* [lambda_kwds]
| '*' ',' lambda_param_maybe_default+ [lambda_kwds]
| lambda_kwds
lambda_kwds:
| '**' lambda_param_no_default
lambda_param_no_default:
| lambda_param ','
| lambda_param &':'
lambda_param_with_default:
| lambda_param default ','
| lambda_param default &':'
lambda_param_maybe_default:
| lambda_param default? ','
| lambda_param default? &':'
lambda_param: NAME
# LITERALS
# ========
fstring_middle:
| fstring_replacement_field
| FSTRING_MIDDLE
fstring_replacement_field:
| '{' annotated_rhs '='? [fstring_conversion] [fstring_full_format_spec] '}'
fstring_conversion:
| "!" NAME
fstring_full_format_spec:
| ':' fstring_format_spec*
fstring_format_spec:
| FSTRING_MIDDLE
| fstring_replacement_field
fstring:
| FSTRING_START fstring_middle* FSTRING_END
string: STRING
strings: (fstring|string)+
list:
| '[' [star_named_expressions] ']'
# Dicts
# -----
dict:
| '{' [double_starred_kvpairs] '}'
double_starred_kvpair:
| '**' bitwise_or
| kvpair
for_if_clauses:
| for_if_clause+
for_if_clause:
| 'async' 'for' star_targets 'in' ~ disjunction ('if' disjunction )*
| 'for' star_targets 'in' ~ disjunction ('if' disjunction )*
listcomp:
| '[' named_expression for_if_clauses ']'
setcomp:
| '{' named_expression for_if_clauses '}'
genexp:
| '(' ( assignment_expression | expression !':=') for_if_clauses ')'
dictcomp:
| '{' kvpair for_if_clauses '}'
arguments:
| args [','] &')'
args:
| ','.(starred_expression | ( assignment_expression | expression !':=') !'=')+␣
,→[',' kwargs ]
| kwargs
kwargs:
| ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
| ','.kwarg_or_starred+
| ','.kwarg_or_double_starred+
(suite sur la page suivante)
151
The Python Language Reference, Version 3.13.7
starred_expression:
| '*' expression
kwarg_or_starred:
| NAME '=' expression
| starred_expression
kwarg_or_double_starred:
| NAME '=' expression
| '**' expression
# ASSIGNMENT TARGETS
# ==================
# Generic targets
# ---------------
star_targets_tuple_seq:
| star_target (',' star_target )+ [',']
| star_target ','
star_target:
| '*' (!'*' star_target)
| target_with_star_atom
target_with_star_atom:
| t_primary '.' NAME !t_lookahead
| t_primary '[' slices ']' !t_lookahead
| star_atom
star_atom:
| NAME
| '(' target_with_star_atom ')'
| '(' [star_targets_tuple_seq] ')'
| '[' [star_targets_list_seq] ']'
single_target:
| single_subscript_attribute_target
| NAME
| '(' single_target ')'
single_subscript_attribute_target:
| t_primary '.' NAME !t_lookahead
| t_primary '[' slices ']' !t_lookahead
t_primary:
| t_primary '.' NAME &t_lookahead
| t_primary '[' slices ']' &t_lookahead
(suite sur la page suivante)
del_target:
| t_primary '.' NAME !t_lookahead
| t_primary '[' slices ']' !t_lookahead
| del_t_atom
del_t_atom:
| NAME
| '(' del_target ')'
| '(' [del_targets] ')'
| '[' [del_targets] ']'
# TYPING ELEMENTS
# ---------------
func_type_comment:
| NEWLINE TYPE_COMMENT &(NEWLINE INDENT) # Must be followed by indented block
| TYPE_COMMENT
153
The Python Language Reference, Version 3.13.7
Glossaire
>>>
The default Python prompt of the interactive shell. Often seen for code examples which can be executed
interactively in the interpreter.
...
Peut faire ré fé rence à :
— The default Python prompt of the interactive shell when entering the code for an indented code block,
when within a pair of matching left and right delimiters (parentheses, square brackets, curly braces or
triple quotes), or after specifying a decorator.
— The three dots form of the Ellipsis object.
classe mère abstraite
Les classes mè res abstraites (ABC, suivant l’abré viation anglaise Abstract Base Class) complè tent le duck-
typing en fournissant un moyen de dé finir des interfaces pour les cas où d’autres techniques comme
hasattr() seraient iné lé gantes ou subtilement fausses (par exemple avec les méthodes magiques). Les ABC
introduisent des sous-classes virtuelles qui n’hé ritent pas d’une classe mais qui sont quand mê me reconnues
par isinstance() ou issubclass() (voir la documentation du module abc). Python contient de nom-
breuses ABC pour les structures de donné es (dans le module [Link]), les nombres (dans le
module numbers), les flux (dans le module io) et les chercheurs-chargeurs du systè me d’importation (dans
le module [Link]). Vous pouvez cré er vos propres ABC avec le module abc.
annotation
Étiquette associé e à une variable, un attribut de classe, un paramè tre de fonction ou une valeur de retour. Elle
est utilisé e par convention comme type hint.
Les annotations de variables locales ne sont pas accessibles au moment de l’exé cution, mais les annotations de
variables globales, d’attributs de classe et de fonctions sont stocké es dans l’attribut spé cial __annotations__
des modules, classes et fonctions, respectivement.
Voir annotation de variable, annotation de fonction, les PEP 484 et PEP 526, qui dé crivent cette fonction-
nalité . Voir aussi annotations-howto sur les bonnes pratiques concernant les annotations.
argument
Valeur, donné e à une fonction ou à une méthode lors de son appel. Il existe deux types d’arguments :
— argument nommé : un argument pré cé dé d’un identifiant (comme name=) ou un dictionnaire pré cé dé de
**, lors d’un appel de fonction. Par exemple, 3 et 5 sont tous les deux des arguments nommé s dans l’appel
à complex() ici :
complex(real=3, imag=5)
complex(**{'real': 3, 'imag': 5})
155
The Python Language Reference, Version 3.13.7
— argument positionnel : un argument qui n’est pas nommé . Les arguments positionnels apparaissent au dé but
de la liste des arguments, ou donné s sous forme d’un itérable pré cé dé par *. Par exemple, 3 et 5 sont tous
les deux des arguments positionnels dans les appels suivants :
complex(3, 5)
complex(*(3, 5))
Les arguments se retrouvent dans le corps de la fonction appelé e parmi les variables locales. Voir la section
Appels à propos des rè gles dictant cette affectation. Syntaxiquement, toute expression est accepté e comme
argument, et c’est la valeur ré sultante de l’expression qui sera affecté e à la variable locale.
Voir aussi paramètre dans le glossaire, la question Diffé rence entre argument et paramè tre de la FAQ et la
PEP 362.
gestionnaire de contexte asynchrone
(asynchronous context manager en anglais) Objet contrô lant l’environnement à l’inté rieur d’une instruction
async with en dé finissant les mé thodes __aenter__() et __aexit__(). A é té Introduit par la PEP
492.
générateur asynchrone
Fonction qui renvoie un itérateur de générateur asynchrone. Cela ressemble à une coroutine dé finie par async
def , sauf qu’elle contient une ou des expressions yield produisant ainsi uns sé rie de valeurs utilisables dans
une boucle async for.
Gé né rateur asynchrone fait gé né ralement ré fé rence à une fonction, mais peut faire ré fé rence à un itérateur de
générateur asynchrone dans certains contextes. Dans les cas où le sens voulu n’est pas clair, utiliser l’ensemble
des termes lè ve l’ambiguïté .
Un gé né rateur asynchrone peut contenir des expressions await ainsi que des instructions async for, et
async with.
itérateur de générateur asynchrone
An object created by an asynchronous generator function.
C’est un asynchronous iterator qui, lorsqu’il est appelé via la mé thode __anext__() renvoie un objet awai-
table qui exé cute le corps de la fonction du gé né rateur asynchrone jusqu’au prochain yield.
Each yield temporarily suspends processing, remembering the execution state (including local variables and
pending try-statements). When the asynchronous generator iterator effectively resumes with another awaitable
returned by __anext__(), it picks up where it left off. See PEP 492 and PEP 525.
itérable asynchrone
Objet qui peut ê tre utilisé dans une instruction async for. Sa mé thode __aiter__() doit renvoyer un
asynchronous iterator. A é té introduit par la PEP 492.
itérateur asynchrone
Objet qui implé mente les mé thodes __aiter__() et __anext__(). __anext__() doit renvoyer un ob-
jet awaitable. Tant que la mé thode __anext__() produit des objets awaitable, le async for appelant
les consomme. L’ité rateur asynchrone lè ve une exception StopAsyncIteration pour signifier la fin de
l’ité ration. A é té introduit par la PEP 492.
attribut
Valeur associé e à un objet et habituellement dé signé e par son nom via une notation utilisant des points. Par
exemple, si un objet o possè de un attribut a, cet attribut est ré fé rencé par o.a.
Il est possible de donner à un objet un attribut dont le nom n’est pas un identifiant tel que dé fini pour les
Identifiants et mots-clés, par exemple en utilisant setattr(), si l’objet le permet. Un tel attribut ne sera pas
accessible à l’aide d’une expression pointé e et on devra y accé der avec getattr().
attendable (awaitable)
Objet pouvant ê tre utilisé dans une expression await. Ce peut ê tre une coroutine ou un objet avec une mé thode
__await__(). Voir aussi la PEP 492.
BDFL
Dictateur bienveillant à vie (Benevolent Dictator For Life en anglais). Pseudonyme de Guido van Rossum, le
cré ateur de Python.
fichier binaire
A file object able to read and write bytes-like objects. Examples of binary files are files opened in binary mode
('rb', 'wb' or 'rb+'), [Link], [Link], and instances of [Link] and
[Link].
Consultez fichier texte, un objet fichier capable de lire et d’é crire des objets str.
référence empruntée
In Python’s C API, a borrowed reference is a reference to an object, where the code using the object does not
own the reference. It becomes a dangling pointer if the object is destroyed. For example, a garbage collection
can remove the last strong reference to the object and so destroy it.
Il est recommandé d’appeler Py_INCREF() sur la référence empruntée, ce qui la transforme in situ en une
référence forte. Vous pouvez faire une exception si vous ê tes certain que l’objet ne peut pas ê tre supprimé
avant la derniè re utilisation de la ré fé rence emprunté e. Voir aussi la fonction Py_NewRef(), qui cré e une
nouvelle référence forte.
objet octet-compatible
Un objet gé rant le protocole tampon et pouvant exporter un tampon (buffer en anglais) C-contigu. Cela inclut
les objets bytes, bytearray et [Link], ainsi que beaucoup d’objets memoryview. Les objets octets-
compatibles peuvent ê tre utilisé s pour diverses opé rations sur des donné es binaires, comme la compression,
la sauvegarde dans un fichier binaire ou l’envoi sur le ré seau.
Certaines opé rations né cessitent de travailler sur des donné es binaires variables. La documentation parle
de ceux-ci comme des read-write bytes-like objects. Par exemple, bytearray ou une memoryview d’un
bytearray en font partie. D’autres opé rations né cessitent de travailler sur des donné es binaires stocké es
dans des objets immuables (« objets octets-compatibles en lecture seule »), par exemple des bytes ou des
memoryview d’un objet bytes.
code intermédiaire (bytecode)
Le code source, en Python, est compilé en un code intermé diaire (bytecode en anglais), la repré sentation
interne à CPython d’un programme Python. Le code intermé diaire est mis en cache dans un fichier .pyc
de maniè re à ce qu’une seconde exé cution soit plus rapide (la compilation en code intermé diaire a dé jà é té
faite). On dit que ce langage intermédiaire est exé cuté sur une virtual machine qui exé cute des instructions
machine pour chaque instruction du code intermé diaire. Notez que le code intermé diaire n’a pas vocation à
fonctionner sur diffé rentes machines virtuelles Python ou à ê tre stable entre diffé rentes versions de Python.
La documentation du module dis fournit une liste des instructions du code intermé diaire.
appelable (callable)
Un appelable est un objet qui peut ê tre appelé , é ventuellement avec un ensemble d’arguments (voir argument),
avec la syntaxe suivante :
Une fonction, et par extension une méthode, est un appelable. Une instance d’une classe qui implé mente la
mé thode __call__() est é galement un appelable.
fonction de rappel (callback)
Une fonction (classique, par opposition à une coroutine) passé e en argument pour ê tre exé cuté e plus tard.
classe
Modè le pour cré er des objets dé finis par l’utilisateur. Une dé finition de classe (class) contient normalement
des dé finitions de mé thodes qui agissent sur les instances de la classe.
variable de classe
Une variable dé finie dans une classe et destiné e à ê tre modifié e uniquement au niveau de la classe (c’est-à -dire,
pas dans une instance de la classe).
closure variable
A free variable referenced from a nested scope that is defined in an outer scope rather than being resolved at
runtime from the globals or builtin namespaces. May be explicitly defined with the nonlocal keyword to
allow write access, or implicitly defined if the variable is only being read.
For example, in the inner function in the following code, both x and print are free variables, but only x is
a closure variable :
def outer():
x = 0
def inner():
(suite sur la page suivante)
157
The Python Language Reference, Version 3.13.7
Due to the codeobject.co_freevars attribute (which, despite its name, only includes the names of clo-
sure variables rather than listing all referenced free variables), the more general free variable term is some-
times used even when the intended meaning is to refer specifically to closure variables.
nombre complexe
Extension des nombres ré els familiers, dans laquelle tous les nombres sont exprimé s sous la forme d’une
somme d’une partie ré elle et d’une partie imaginaire. Les nombres imaginaires sont les nombres ré els multi-
plié s par l’unité imaginaire (la racine carré e de -1, souvent é crite i en mathé matiques ou j par les ingé nieurs).
Python comprend nativement les nombres complexes, é crits avec cette derniè re notation : la partie imaginaire
est é crite avec un suffixe j, exemple, 3+1j. Pour utiliser les é quivalents complexes de math, utilisez cmath.
Les nombres complexes sont un concept assez avancé en mathé matiques. Si vous ne connaissez pas ce concept,
vous pouvez tranquillement les ignorer.
context
This term has different meanings depending on where and how it is used. Some common meanings :
— The temporary state or environment established by a context manager via a with statement.
— The collection of keyvalue bindings associated with a particular [Link] object and
accessed via ContextVar objects. Also see context variable.
— A [Link] object. Also see current context.
context management protocol
The __enter__() and __exit__() methods called by the with statement. See PEP 343.
gestionnaire de contexte
An object which implements the context management protocol and controls the environment seen in a with
statement. See PEP 343.
variable de contexte
A variable whose value depends on which context is the current context. Values are accessed via
[Link] objects. Context variables are primarily used to isolate state between concur-
rent asynchronous tasks.
contigu
Un tampon (buffer en anglais) est considé ré comme contigu s’il est soit C-contigu soit Fortran-contigu. Les
tampons de dimension zé ro sont C-contigus et Fortran-contigus. Pour un tableau à une dimension, ses é lé -
ments doivent ê tre placé s en mé moire l’un à cô té de l’autre, dans l’ordre croissant de leur indice, en commen-
çant à zé ro. Pour qu’un tableau multidimensionnel soit C-contigu, le dernier indice doit ê tre celui qui varie le
plus rapidement lors du parcours de ses é lé ments dans l’ordre de leur adresse mé moire. À l’inverse, dans les
tableaux Fortran-contigu, c’est le premier indice qui doit varier le plus rapidement.
coroutine
Les coroutines sont une forme gé né ralisé e des fonctions. On entre dans une fonction en un point et on en sort
en un autre point. On peut entrer, sortir et reprendre l’exé cution d’une coroutine en plusieurs points. Elles
peuvent ê tre implé menté es en utilisant l’instruction async def . Voir aussi la PEP 492.
fonction coroutine
Fonction qui renvoie un objet coroutine. Une fonction coroutine peut ê tre dé finie par l’instruction async def
et peut contenir les mots clé s await, async for ainsi que async with. A é té introduit par la PEP 492.
CPython
L’implé mentation canonique du langage de programmation Python, tel que distribué sur [Link]. Le terme
”CPython” est utilisé dans certains contextes lorsqu’il est né cessaire de distinguer cette implé mentation des
autres comme Jython ou IronPython.
current context
The context ([Link] object) that is currently used by ContextVar objects to access (get
or set) the values of context variables. Each thread has its own current context. Frameworks for executing
asynchronous tasks (see asyncio) associate each task with a context which becomes the current context
whenever the task starts or resumes execution.
décorateur
Fonction dont la valeur de retour est une autre fonction. Un dé corateur est habituellement utilisé pour
transformer une fonction via la syntaxe @wrapper, dont les exemples typiques sont : classmethod() et
staticmethod().
La syntaxe des dé corateurs est simplement du sucre syntaxique, les dé finitions des deux fonctions suivantes
sont sé mantiquement é quivalentes :
def f(arg):
...
f = staticmethod(f)
@staticmethod
def f(arg):
...
Quoique moins fré quemment utilisé , le mê me concept existe pour les classes. Consultez la documentation
définitions de fonctions et définitions de classes pour en savoir plus sur les dé corateurs.
descripteur
Any object which defines the methods __get__(), __set__(), or __delete__(). When a class attribute
is a descriptor, its special binding behavior is triggered upon attribute lookup. Normally, using a.b to get,
set or delete an attribute looks up the object named b in the class dictionary for a, but if b is a descriptor,
the respective descriptor method gets called. Understanding descriptors is a key to a deep understanding of
Python because they are the basis for many features including functions, methods, properties, class methods,
static methods, and reference to super classes.
Pour plus d’informations sur les mé thodes des descripteurs, consultez Implémentation de descripteurs ou le
guide pour l’utilisation des descripteurs.
dictionnaire
An associative array, where arbitrary keys are mapped to values. The keys can be any object with __hash__()
and __eq__() methods. Called a hash in Perl.
dictionnaire en compréhension (ou dictionnaire en intension)
Écriture concise pour traiter tout ou partie des é lé ments d’un ité rable et renvoyer un dictionnaire contenant les
ré sultats. results = {n: n ** 2 for n in range(10)} gé nè re un dictionnaire contenant des clé s n
lié es à leurs valeurs n ** 2. Voir compréhensions.
vue de dictionnaire
Objets retourné s par les mé thodes [Link](), [Link]() et [Link](). Ils fournissent des
vues dynamiques des entré es du dictionnaire, ce qui signifie que lorsque le dictionnaire change, la vue change.
Pour transformer une vue en vraie liste, utilisez list(dictview). Voir dict-views.
chaîne de documentation (docstring)
A string literal which appears as the first expression in a class, function or module. While ignored when the
suite is executed, it is recognized by the compiler and put into the __doc__ attribute of the enclosing class,
function or module. Since it is available via introspection, it is the canonical place for documentation of the
object.
typage canard (duck-typing)
Style de programmation qui ne prend pas en compte le type d’un objet pour dé terminer s’il respecte une
interface, mais qui appelle simplement la mé thode ou l’attribut (Si ça a un bec et que ça cancane, ça doit être
un canard, duck signifie canard en anglais). En se concentrant sur les interfaces plutô t que les types, du code
bien construit amé liore sa flexibilité en autorisant des substitutions polymorphiques. Le duck-typing é vite de
vé rifier les types via type() ou isinstance(), Notez cependant que le duck-typing peut travailler de pair
avec les classes mère abstraites. À la place, le duck-typing utilise plutô t hasattr() ou la programmation
EAFP.
dunder
An informal short-hand for ”double underscore”, used when talking about a special method. For example,
__init__ is often pronounced ”dunder init”.
EAFP
Il est plus simple de demander pardon que demander la permission (Easier to Ask for Forgiveness than Per-
mission en anglais). Ce style de dé veloppement Python fait l’hypothè se que le code est valide et traite les
exceptions si cette hypothè se s’avè re fausse. Ce style, propre et efficace, est caracté risé par la pré sence de
beaucoup de mots clé s try et except. Cette technique de programmation contraste avec le style LBYL utilisé
couramment dans les langages tels que C.
159
The Python Language Reference, Version 3.13.7
expression
Suite logique de termes et chiffres conformes à la syntaxe Python dont l’é valuation fournit une valeur. En
d’autres termes, une expression est une suite d’é lé ments tels que des noms, opé rateurs, litté raux, accè s d’at-
tributs, mé thodes ou fonctions qui aboutissent à une valeur. Contrairement à beaucoup d’autres langages, les
diffé rentes constructions du langage ne sont pas toutes des expressions. On trouve é galement des instructions
qui ne peuvent pas ê tre utilisé es comme expressions, tel que while. Les affectations sont é galement des
instructions et non des expressions.
module d’extension
Module é crit en C ou C++, utilisant l’API C de Python pour interagir avec Python et le code de l’utilisateur.
f-string
Chaîne litté rale pré fixé e de 'f' ou 'F'. Les ”f-strings” sont un raccourci pour formatted string literals. Voir
la PEP 498.
objet fichier
An object exposing a file-oriented API (with methods such as read() or write()) to an underlying resource.
Depending on the way it was created, a file object can mediate access to a real on-disk file or to another type
of storage or communication device (for example standard input/output, in-memory buffers, sockets, pipes,
etc.). File objects are also called file-like objects or streams.
Il existe en ré alité trois caté gories de fichiers objets : les fichiers binaires bruts, les fichiers binaires avec tampon
(buffer) et les fichiers textes. Leurs interfaces sont dé finies dans le module io. Le moyen le plus simple et direct
de cré er un objet fichier est d’utiliser la fonction open().
objet fichier-compatible
Synonyme de objet fichier.
encodage du système de fichiers et gestionnaire d’erreurs associé
Encodage et gestionnaire d’erreurs utilisé s par Python pour dé coder les octets fournis par le systè me d’exploi-
tation et encoder les chaînes de caractè res Unicode afin de les passer au systè me.
L’encodage du systè me de fichiers doit impé rativement pouvoir dé coder tous les octets jusqu’à 128. Si ce n’est
pas le cas, certaines fonctions de l’API lè vent UnicodeError.
Cet encodage et son gestionnaire d’erreur peuvent ê tre obtenus à l’aide des fonctions sys.
getfilesystemencoding() et [Link]().
L’encodage du système de fichiers et gestionnaire d’erreurs associé sont configuré s au dé marrage de Python
par la fonction PyConfig_Read() : regardez filesystem_encoding et filesystem_errors dans les
membres de PyConfig.
Voir aussi encodage régional.
chercheur
Objet qui essaie de trouver un chargeur pour le module en cours d’importation.
There are two types of finder : meta path finders for use with sys.meta_path, and path entry finders for
use with sys.path_hooks.
See Chercheurs et chargeurs and importlib for much more detail.
division entière
Division mathé matique arrondissant à l’entier infé rieur. L’opé rateur de la division entiè re est //. Par exemple
l’expression 11 // 4 vaut 2, contrairement à 11 / 4 qui vaut 2.75. Notez que (-11) // 4 vaut -3 car
l’arrondi se fait à l’entier infé rieur. Voir la PEP 328.
free threading
A threading model where multiple threads can run Python bytecode simultaneously within the same interpre-
ter. This is in contrast to the global interpreter lock which allows only one thread to execute Python bytecode
at a time. See PEP 703.
free variable
Formally, as defined in the language execution model, a free variable is any variable used in a namespace
which is not a local variable in that namespace. See closure variable for an example. Pragmatically, due to
the name of the codeobject.co_freevars attribute, the term is also sometimes used as a synonym for
closure variable.
fonction
Suite d’instructions qui renvoie une valeur à son appelant. On peut lui passer des arguments qui pourront ê tre
utilisé s dans le corps de la fonction. Voir aussi paramètre, méthode et Définition de fonctions.
annotation de fonction
annotation d’un paramè tre de fonction ou valeur de retour.
Les annotations de fonctions sont gé né ralement utilisé es pour des indications de types : par exemple, cette
fonction devrait prendre deux arguments int et devrait é galement avoir une valeur de retour de type int :
ramasse-miettes
(garbage collection en anglais) Mé canisme permettant de libé rer de la mé moire lorsqu’elle n’est plus utili-
sé e. Python utilise un ramasse-miettes par comptage de ré fé rence et un ramasse-miettes cyclique capable de
dé tecter et casser les ré fé rences circulaires. Le ramasse-miettes peut ê tre contrô lé en utilisant le module gc.
générateur
Fonction qui renvoie un itérateur de générateur. Cela ressemble à une fonction normale, en dehors du fait
qu’elle contient une ou des expressions yield produisant une sé rie de valeurs utilisable dans une boucle for
ou ré cupé ré es une à une via la fonction next().
Fait gé né ralement ré fé rence à une fonction gé né ratrice mais peut faire ré fé rence à un itérateur de généra-
teur dans certains contextes. Dans les cas où le sens voulu n’est pas clair, utiliser les termes complets lè ve
l’ambiguïté .
itérateur de générateur
Objet cré é par une fonction générateur.
Each yield temporarily suspends processing, remembering the execution state (including local variables
and pending try-statements). When the generator iterator resumes, it picks up where it left off (in contrast to
functions which start fresh on every invocation).
expression génératrice
An expression that returns an iterator. It looks like a normal expression followed by a for clause defining a
loop variable, range, and an optional if clause. The combined expression generates values for an enclosing
function :
fonction générique
Fonction composé e de plusieurs fonctions implé mentant les mê mes opé rations pour diffé rents types. L’im-
plé mentation à utiliser est dé terminé e lors de l’appel par l’algorithme de ré partition.
Voir aussi single dispatch, le dé corateur [Link]() et la PEP 443.
type générique
Un type qui peut ê tre paramé tré ; gé né ralement un conteneur comme list ou dict. Utilisé pour les indica-
tions de type et les annotations.
Pour plus de dé tails, voir types alias gé né riques et le module typing. On trouvera l’historique de cette fonc-
tionnalité dans les PEP 483, PEP 484 et PEP 585.
161
The Python Language Reference, Version 3.13.7
GIL
Voir global interpreter lock.
verrou global de l’interpréteur
(global interpreter lock en anglais) Mé canisme utilisé par l’interpré teur CPython pour s’assurer qu’un seul fil
d’exé cution (thread en anglais) n’exé cute le bytecode à la fois. Cela simplifie l’implé mentation de CPython en
rendant le modè le objet (incluant des parties critiques comme la classe native dict) implicitement proté gé
contre les accè s concourants. Verrouiller l’interpré teur entier rend plus facile l’implé mentation de multiples
fils d’exé cution (multi-thread en anglais), au dé triment malheureusement de beaucoup du parallé lisme possible
sur les machines ayant plusieurs processeurs.
Cependant, certains modules d’extension, standards ou non, sont conçus de maniè re à libé rer le GIL lorsqu’ils
effectuent des tâ ches lourdes tel que la compression ou le hachage. De la mê me maniè re, le GIL est toujours
libé ré lors des entré es-sorties.
As of Python 3.13, the GIL can be disabled using the --disable-gil build configuration. After building
Python with this option, code must be run with -X gil=0 or after setting the PYTHON_GIL=0 environment
variable. This feature enables improved performance for multi-threaded applications and makes it easier to
use multi-core CPUs efficiently. For more details, see PEP 703.
pyc utilisant le hachage
Un fichier de cache de code intermé diaire (bytecode en anglais) qui utilise le hachage plutô t que l’heure
de derniè re modification du fichier source correspondant pour dé terminer sa validité . Voir Invalidation de
bytecode mis en cache.
hachable
An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__()
method), and can be compared to other objects (it needs an __eq__() method). Hashable objects which
compare equal must have the same hash value.
La hachabilité permet à un objet d’ê tre utilisé comme clé de dictionnaire ou en tant que membre d’un ensemble
(type set), car ces structures de donné es utilisent ce hash.
La plupart des types immuables natifs de Python sont hachables, mais les conteneurs mutables (comme les
listes ou les dictionnaires) ne le sont pas ; les conteneurs immuables (comme les n-uplets ou les ensembles figé s)
ne sont hachables que si leurs é lé ments sont hachables. Les instances de classes dé finies par les utilisateurs
sont hachables par dé faut. Elles sont toutes considé ré es diffé rentes (sauf avec elles-mê mes) et leur valeur de
hachage est calculé e à partir de leur id().
IDLE
Environnement d’apprentissage et de dé veloppement inté gré pour Python. IDLE est un é diteur basique et un
interpré teur livré avec la distribution standard de Python.
immortal
Immortal objects are a CPython implementation detail introduced in PEP 683.
If an object is immortal, its reference count is never modified, and therefore it is never deallocated while the
interpreter is running. For example, True and None are immortal in CPython.
immuable
Objet dont la valeur ne change pas. Les nombres, les chaînes et les n-uplets sont immuables. Ils ne peuvent ê tre
modifié s. Un nouvel objet doit ê tre cré é si une valeur diffé rente doit ê tre stocké e. Ils jouent un rô le important
quand une valeur de hash constante est requise, typiquement en clé de dictionnaire.
chemin des importations
Liste de entrées dans lesquelles le chercheur basé sur les chemins cherche les modules à importer. Typiquement,
lors d’une importation, cette liste vient de [Link] ; pour les sous-paquets, elle peut aussi venir de l’attribut
__path__ du paquet parent.
importation
Processus rendant le code Python d’un module disponible dans un autre.
importateur
Objet qui trouve et charge un module, en mê me temps un chercheur et un chargeur.
interactif
Python has an interactive interpreter which means you can enter statements and expressions at the interpreter
prompt, immediately execute them and see their results. Just launch python with no arguments (possibly
by selecting it from your computer’s main menu). It is a very powerful way to test out new ideas or inspect
modules and packages (remember help(x)). For more on interactive mode, see tut-interac.
interprété
Python est un langage interpré té , en opposition aux langages compilé s, bien que la frontiè re soit floue en
raison de la pré sence d’un compilateur en code intermé diaire. Cela signifie que les fichiers sources peuvent
ê tre exé cuté s directement, sans avoir à compiler un fichier exé cutable intermé diaire. Les langages interpré té s
ont gé né ralement un cycle de dé veloppement / dé bogage plus court que les langages compilé s. Cependant, ils
s’exé cutent gé né ralement plus lentement. Voir aussi interactif.
arrêt de l’interpréteur
Lorsqu’on lui demande de s’arrê ter, l’interpré teur Python entre dans une phase spé ciale où il libè re graduel-
lement les ressources alloué es, comme les modules ou quelques structures de donné es internes. Il fait aussi
quelques appels au ramasse-miettes. Cela peut dé clencher l’exé cution de code dans des destructeurs ou des
fonctions de rappels de weakrefs. Le code exé cuté lors de l’arrê t peut rencontrer des exceptions puisque les
ressources auxquelles il fait appel sont susceptibles de ne plus fonctionner, (typiquement les modules des
bibliothè ques ou le mé canisme de warning).
La principale raison d’arrê t de l’interpré teur est que le module __main__ ou le script en cours d’exé cution a
terminé de s’exé cuter.
itérable
An object capable of returning its members one at a time. Examples of iterables include all sequence types
(such as list, str, and tuple) and some non-sequence types like dict, file objects, and objects of any
classes you define with an __iter__() method or with a __getitem__() method that implements sequence
semantics.
Iterables can be used in a for loop and in many other places where a sequence is needed (zip(), map(),
...). When an iterable object is passed as an argument to the built-in function iter(), it returns an iterator
for the object. This iterator is good for one pass over the set of values. When using iterables, it is usually not
necessary to call iter() or deal with iterator objects yourself. The for statement does that automatically for
you, creating a temporary unnamed variable to hold the iterator for the duration of the loop. See also iterator,
sequence, and generator.
itérateur
An object representing a stream of data. Repeated calls to the iterator’s __next__() method (or passing
it to the built-in function next()) return successive items in the stream. When no more data are available
a StopIteration exception is raised instead. At this point, the iterator object is exhausted and any fur-
ther calls to its __next__() method just raise StopIteration again. Iterators are required to have an
__iter__() method that returns the iterator object itself so every iterator is also iterable and may be used
in most places where other iterables are accepted. One notable exception is code which attempts multiple
iteration passes. A container object (such as a list) produces a fresh new iterator each time you pass it
to the iter() function or use it in a for loop. Attempting this with an iterator will just return the same
exhausted iterator object used in the previous iteration pass, making it appear like an empty container.
Vous trouverez davantage d’informations dans typeiter.
Particularité de l’implémentation CPython : CPython does not consistently apply the requirement that an
iterator define __iter__(). And also please note that the free-threading CPython does not guarantee the
thread-safety of iterator operations.
fonction clé
Une fonction clé est un objet appelable qui renvoie une valeur à fins de tri ou de classement. Par exemple, la
fonction [Link]() est utilisé e pour gé né rer une clé de classement prenant en compte les conven-
tions de classement spé cifiques aux paramè tres ré gionaux courants.
Plusieurs outils dans Python acceptent des fonctions clé s pour dé terminer comment les é lé ments sont clas-
sé s ou groupé s. On peut citer les fonctions min(), max(), sorted(), [Link](), [Link](),
[Link](), [Link]() et [Link]().
Il existe plusieurs moyens de cré er une fonction clé . Par exemple, la mé thode [Link]() peut servir
de fonction clé pour effectuer des recherches insensibles à la casse. Aussi, il est possible de cré er des fonc-
tions clé s avec des expressions lambda, comme lambda r: (r[0], r[2]). Par ailleurs attrgetter(),
itemgetter() et methodcaller() permettent de cré er des fonctions clé s. Voir le guide pour le tri pour
des exemples de cré ation et d’utilisation de fonctions clefs.
argument nommé
Voir argument.
lambda
163
The Python Language Reference, Version 3.13.7
Fonction anonyme sous la forme d’une expression et ne contenant qu’une seule expression, exé cuté e lorsque
la fonction est appelé e. La syntaxe pour cré er des fonctions lambda est : lambda [parameters]:
expression
LBYL
Regarde avant de sauter, (Look before you leap en anglais). Ce style de programmation consiste à vé rifier des
conditions avant d’effectuer des appels ou des accè s. Ce style contraste avec le style EAFP et se caracté rise
par la pré sence de beaucoup d’instructions if .
Dans un environnement avec plusieurs fils d’exé cution (multi-threaded en anglais), le style LBYL peut engen-
drer un sé quencement critique (race condition en anglais) entre le ”regarde” et le ”sauter”. Par exemple, le
code if key in mapping: return mapping[key] peut é chouer si un autre fil d’exé cution supprime
la clé key du mapping aprè s le test mais avant l’accè s. Ce problè me peut ê tre ré solu avec des verrous (locks)
ou avec l’approche EAFP.
lexical analyzer
Formal name for the tokenizer ; see token.
liste
A built-in Python sequence. Despite its name it is more akin to an array in other languages than to a linked
list since access to elements is O(1).
liste en compréhension (ou liste en intension)
Écriture concise pour manipuler tout ou partie des é lé ments d’une sé quence et renvoyer une liste contenant
les ré sultats. result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] gé nè re
la liste composé e des nombres pairs de 0 à 255 é crits sous formes de chaînes de caractè res et en hexadé cimal
(0x…). La clause if est optionnelle. Si elle est omise, tous les é lé ments du range(256) seront utilisé s.
chargeur
An object that loads a module. It must define the exec_module() and create_module() methods to
implement the Loader interface. A loader is typically returned by a finder. See also :
— Chercheurs et chargeurs
— [Link]
— PEP 302
encodage régional
Sous Unix, il est dé fini par la variable ré gionale LC_CTYPE. Il peut ê tre modifié par locale.
setlocale(locale.LC_CTYPE, new_locale).
Sous Windows, c’est un encodage ANSI (par ex. : "cp1252").
Sous Android et VxWorks, Python utilise "utf-8" comme encodage ré gional.
[Link]() can be used to get the locale encoding.
sont utilisé es pour journaliser les accè s à des proprié té s, rendre sû rs les environnements multi-threads, suivre
la cré ation d’objets, implé menter des singletons et bien d’autres tâ ches.
Plus d’informations sont disponibles dans : Métaclasses.
méthode
Fonction dé finie à l’inté rieur d’une classe. Lorsqu’elle est appelé e comme un attribut d’une instance de cette
classe, la mé thode reçoit l’instance en premier argument (qui, par convention, est habituellement nommé
self). Voir function et nested scope.
ordre de résolution des méthodes
Method Resolution Order is the order in which base classes are searched for a member during lookup. See
python_2.3_mro for details of the algorithm used by the Python interpreter since the 2.3 release.
module
Objet utilisé pour organiser une portion unitaire de code en Python. Les modules ont un espace de nommage
et peuvent contenir n’importe quels objets Python. Charger des modules est appelé importer.
Voir aussi paquet.
spécificateur de module
Espace de nommage contenant les informations, relatives à l’importation, utilisé es pour charger un module.
C’est une instance de la classe [Link].
See also Spécificateurs de modules.
MRO
Voir ordre de résolution des méthodes.
mutable
Un objet mutable peut changer de valeur tout en gardant le mê me id(). Voir aussi immuable.
n-uplet nommé
Le terme ”n-uplet nommé ” s’applique à tous les types ou classes qui hé ritent de la classe tuple et dont les
é lé ments indexables sont aussi accessibles en utilisant des attributs nommé s. Les types et classes peuvent avoir
aussi d’autres caracté ristiques.
Plusieurs types natifs sont appelé s n-uplets, y compris les valeurs retourné es par [Link]() et
[Link](). Un autre exemple est sys.float_info :
Some named tuples are built-in types (such as the above examples). Alternatively, a named tuple can be
created from a regular class definition that inherits from tuple and that defines named fields. Such a class
can be written by hand, or it can be created by inheriting [Link], or with the factory function
[Link](). The latter techniques also add some extra methods that may not be found
in hand-written or built-in named tuples.
espace de nommage
L’endroit où une variable est stocké e. Les espaces de nommage sont implé menté s avec des dictionnaires. Il
existe des espaces de nommage globaux, natifs ou imbriqué s dans les objets (dans les mé thodes). Les espaces
de nommage favorisent la modularité car ils permettent d’é viter les conflits de noms. Par exemple, les fonctions
[Link] et [Link]() sont diffé rencié es par leurs espaces de nom. Les espaces de nommage aident
aussi à la lisibilité et la maintenabilité en rendant clair quel module implé mente une fonction. Par exemple,
é crire [Link]() ou [Link]() affiche clairement que ces fonctions sont implé menté es
respectivement dans les modules random et itertools.
paquet-espace de nommage
A package which serves only as a container for subpackages. Namespace packages may have no physical
representation, and specifically are not like a regular package because they have no __init__.py file.
Namespace packages allow several individually installable packages to have a common parent package. Other-
wise, it is recommended to use a regular package.
For more information, see PEP 420 and Paquets espaces de nommage.
165
The Python Language Reference, Version 3.13.7
— positional-only : dé finit un argument qui ne peut ê tre fourni que par position. Les paramè tres positional-
only peuvent ê tre dé finis en insé rant un caractè re ”/” dans la liste de paramè tres de la dé finition de fonction
aprè s eux. Par exemple : posonly1 et posonly2 dans le code suivant :
— keyword-only : l’argument ne peut ê tre fourni que nommé . Les paramè tres keyword-only peuvent ê tre
dé finis en utilisant un seul paramè tre var-positional, ou en ajoutant une é toile (*) seule dans la liste des
paramè tres avant eux. Par exemple, kw_only1 et kw_only2 dans le code suivant :
— var-positional : une sé quence d’arguments positionnels peut ê tre fournie (en plus de tous les arguments
positionnels dé jà accepté s par d’autres paramè tres). Un tel paramè tre peut ê tre dé fini en pré fixant son
nom par une *. Par exemple args ci-aprè s :
— var-keyword : une quantité arbitraire d’arguments peut ê tre passé e, chacun é tant nommé (en plus de tous
les arguments nommé s dé jà accepté s par d’autres paramè tres). Un tel paramè tre est dé fini en pré fixant le
nom du paramè tre par **. Par exemple, kwargs ci-dessus.
Les paramè tres peuvent spé cifier des arguments obligatoires ou optionnels, ainsi que des valeurs par dé faut
pour les arguments optionnels.
Voir aussi argument dans le glossaire, la question sur la diffé rence entre les arguments et les paramè tres dans
la FAQ, la classe [Link], la section Définition de fonctions et la PEP 362.
entrée de chemin
Emplacement dans le chemin des importations (import path en anglais, d’où le path) que le chercheur basé sur
les chemins consulte pour trouver des modules à importer.
chercheur de chemins
chercheur renvoyé par un appelable sur un sys.path_hooks (c’est-à -dire un point d’entrée pour la recherche
dans path) qui sait où trouver des modules lorsqu’on lui donne une entrée de path.
Voir [Link] pour les mé thodes qu’un chercheur d’entré e dans path doit im-
plé menter.
point d’entrée pour la recherche dans path
A callable on the sys.path_hooks list which returns a path entry finder if it knows how to find modules
on a specific path entry.
chercheur basé sur les chemins
L’un des chercheurs dans les méta-chemins par dé faut qui cherche des modules dans un chemin des importa-
tions.
objet simili-chemin
Objet repré sentant un chemin du systè me de fichiers. Un objet simili-chemin est un objet str ou un objet
bytes repré sentant un chemin ou un objet implé mentant le protocole [Link]. Un objet qui accepte le
protocole [Link] peut ê tre converti en un chemin str ou bytes du systè me de fichiers en appelant la
fonction [Link](). [Link]() et [Link]() peuvent ê tre utilisé es, respectivement, pour
garantir un ré sultat de type str ou bytes à la place. A é té Introduit par la PEP 519.
PEP
Python Enhancement Proposal (Proposition d’amé lioration de Python). Une PEP est un document de concep-
tion fournissant des informations à la communauté Python ou dé crivant une nouvelle fonctionnalité pour
Python, ses processus ou son environnement. Les PEP doivent fournir une spé cification technique concise et
une justification des fonctionnalité s proposé es.
Les PEP sont censé es ê tre les principaux mé canismes pour proposer de nouvelles fonctionnalité s majeures,
pour recueillir les commentaires de la communauté sur une question et pour documenter les dé cisions de
conception qui sont inté gré es en Python. L’auteur du PEP est responsable de l’é tablissement d’un consensus
au sein de la communauté et de documenter les opinions contradictoires.
Voir la PEP 1.
portion
Jeu de fichiers dans un seul dossier (pouvant ê tre stocké sous forme de fichier zip) qui contribue à l’espace de
nommage d’un paquet, tel que dé fini dans la PEP 420.
argument positionnel
Voir argument.
API provisoire
Une API provisoire est une API qui n’offre aucune garantie de ré trocompatibilité (la bibliothè que standard
exige la ré trocompatibilité ). Bien que des changements majeurs d’une telle interface ne soient pas attendus,
tant qu’elle est é tiqueté e provisoire, des changements cassant la ré trocompatibilité (y compris sa suppres-
sion complè te) peuvent survenir si les dé veloppeurs principaux le jugent né cessaire. Ces modifications ne
surviendront que si de sé rieux problè mes sont dé couverts et qu’ils n’avaient pas é té identifié s avant l’ajout de
l’API.
Mê me pour les API provisoires, les changements cassant la ré trocompatibilité sont considé ré s comme des
”solutions de dernier recours”. Tout ce qui est possible sera fait pour tenter de ré soudre les problè mes en
conservant la ré trocompatibilité .
Ce processus permet à la bibliothè que standard de continuer à é voluer avec le temps, sans se bloquer long-
temps sur des erreurs d’architecture. Voir la PEP 411 pour plus de dé tails.
paquet provisoire
Voir provisional API.
Python 3000
Surnom donné à la sé rie des Python 3.x (trè s vieux surnom donné à l’é poque où Python 3 repré sentait un
futur lointain). Aussi abré gé Py3k.
Pythonique
Idé e, ou bout de code, qui colle aux idiomes de Python plutô t qu’aux concepts communs rencontré s dans
167
The Python Language Reference, Version 3.13.7
d’autres langages. Par exemple, il est idiomatique en Python de parcourir les é lé ments d’un ité rable en utilisant
for. Beaucoup d’autres langages n’ont pas cette possibilité , donc les gens qui ne sont pas habitué s à Python
utilisent parfois un compteur numé rique à la place :
for i in range(len(food)):
print(food[i])
Plutô t qu’utiliser la mé thode, plus propre et é lé gante, donc Pythonique :
nom qualifié
Nom, comprenant des points, montrant le ”chemin” de l’espace de nommage global d’un module vers une
classe, fonction ou mé thode dé finie dans ce module, tel que dé fini dans la PEP 3155. Pour les fonctions et
classes de premier niveau, le nom qualifié est le mê me que le nom de l’objet :
>>> class C:
... class D:
... def meth(self):
... pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> [Link].__qualname__
'[Link]'
Lorsqu’il est utilisé pour nommer des modules, le nom qualifié complet (fully qualified name - FQN en anglais)
signifie le chemin complet (sé paré par des points) vers le module, incluant tous les paquets parents. Par
exemple : [Link] :
nombre de références
The number of references to an object. When the reference count of an object drops to zero, it is deallocated.
Some objects are immortal and have reference counts that are never modified, and therefore the objects are
never deallocated. Reference counting is generally not visible to Python code, but it is a key element of the
CPython implementation. Programmers can call the [Link]() function to return the reference
count for a particular object.
In CPython, reference counts are not considered to be stable or well-defined values ; the number of references
to an object, and how that number is affected by Python code, may be different between versions.
paquet classique
paquet traditionnel, tel qu’un dossier contenant un fichier __init__.py.
Voir aussi paquet-espace de nommage.
REPL
An acronym for the ”read–eval–print loop”, another name for the interactive interpreter shell.
__slots__
Dé claration dans une classe qui é conomise de la mé moire en pré -allouant de l’espace pour les attributs des
instances et qui é limine le dictionnaire (des attributs) des instances. Bien que populaire, cette technique est
difficile à maîtriser et devrait ê tre ré servé e à de rares cas où un grand nombre d’instances dans une application
devient un sujet critique pour la mé moire.
séquence
An iterable which supports efficient element access using integer indices via the __getitem__() special
method and defines a __len__() method that returns the length of the sequence. Some built-in sequence
types are list, str, tuple, and bytes. Note that dict also supports __getitem__() and __len__(),
but is considered a mapping rather than a sequence because the lookups use arbitrary hashable keys rather
than integers.
The [Link] abstract base class defines a much richer interface that goes
beyond just __getitem__() and __len__(), adding count(), index(), __contains__(), and
__reversed__(). Types that implement this expanded interface can be registered explicitly using
register(). For more documentation on sequence methods generally, see Common Sequence Operations.
ensemble en compréhension (ou ensemble en intension)
Une façon compacte de traiter tout ou partie des é lé ments d’un ité rable et de renvoyer un set avec les ré sul-
tats. results = {c for c in 'abracadabra' if c not in 'abc'} gé nè re l’ensemble contenant
les lettres « r » et « d » {'r', 'd'}. Voir Agencements des listes, ensembles et dictionnaires.
distribution simple
Forme de distribution, comme les fonction génériques, où l’implé mentation est choisie en fonction du type
d’un seul argument.
tranche
(slice en anglais), un objet contenant habituellement une portion de séquence. Une tranche est cré ée
en utilisant la notation [] avec des : entre les nombres lorsque plusieurs sont fournis, comme dans
variable_name[1:3:5]. Cette notation utilise des objets slice en interne.
soft deprecated
A soft deprecated API should not be used in new code, but it is safe for already existing code to use it. The
API remains documented and tested, but will not be enhanced further.
Soft deprecation, unlike normal deprecation, does not plan on removing the API and will not emit warnings.
See PEP 387 : Soft Deprecation.
méthode spéciale
(special method en anglais) Mé thode appelé e implicitement par Python pour exé cuter une opé ration sur un
type, comme une addition. De telles mé thodes ont des noms commençant et terminant par des doubles tirets
bas. Les mé thodes spé ciales sont documenté es dans Méthodes spéciales.
standard library
The collection of packages, modules and extension modules distributed as a part of the official Python in-
terpreter package. The exact membership of the collection may vary based on platform, available system
libraries, or other criteria. Documentation can be found at library-index.
See also sys.stdlib_module_names for a list of all possible standard library module names.
instruction
Une instruction (statement en anglais) est un composant d’un ”bloc” de code. Une instruction est soit une
expression, soit une ou plusieurs constructions basé es sur un mot-clé , comme if , while ou for.
static type checker
An external tool that reads Python code and analyzes it, looking for issues such as incorrect types. See also
type hints and the typing module.
stdlib
An abbreviation of standard library.
référence forte
In Python’s C API, a strong reference is a reference to an object which is owned by the code holding the
reference. The strong reference is taken by calling Py_INCREF() when the reference is created and released
with Py_DECREF() when the reference is deleted.
Une ré fé rence forte est cré ée à l’aide de la fonction Py_NewRef(). Il faut normalement appeler
Py_DECREF() dessus avant de sortir de sa porté e lexicale, sans quoi il y a une fuite de ré fé rence.
Voir aussi référence empruntée.
encodages de texte
Une chaîne de caractè res en Python est une suite de points de code Unicode (dans l’intervalle U+0000--
U+10FFFF). Pour stocker ou transmettre une chaîne, il est né cessaire de la sé rialiser en suite d’octets.
Sé rialiser une chaîne de caractè res en une suite d’octets s’appelle « encoder » et recré er la chaîne à partir de
la suite d’octets s’appelle « dé coder ».
Il existe de multiples codecs pour la sé rialisation de texte, que l’on regroupe sous l’expression « encodages de
169
The Python Language Reference, Version 3.13.7
texte ».
fichier texte
Objet fichier capable de lire et d’é crire des objets str. Souvent, un fichier texte (text file en anglais) accè de
en fait à un flux de donné e en octets et gè re l’encodage de texte automatiquement. Des exemples de fichiers
textes sont les fichiers ouverts en mode texte ('r' ou 'w'), [Link], [Link] et les instances de
[Link].
Voir aussi fichier binaire pour un objet fichier capable de lire et d’é crire des objets octets-compatibles.
token
A small unit of source code, generated by the lexical analyzer (also called the tokenizer). Names, numbers,
strings, operators, newlines and similar are represented by tokens.
The tokenize module exposes Python’s lexical analyzer. The token module contains information on the
various types of tokens.
chaîne entre triple guillemets
Chaîne qui est dé limité e par trois guillemets simples (') ou trois guillemets doubles ("). Bien qu’elle ne
fournisse aucune fonctionnalité qui ne soit pas disponible avec une chaîne entre guillemets, elle est utile pour
de nombreuses raisons. Elle vous autorise à insé rer des guillemets simples et doubles dans une chaîne sans
avoir à les proté ger et elle peut s’é tendre sur plusieurs lignes sans avoir à terminer chaque ligne par un \. Elle
est ainsi particuliè rement utile pour les chaînes de documentation (docstrings).
type
The type of a Python object determines what kind of object it is ; every object has a type. An object’s type is
accessible as its __class__ attribute or can be retrieved with type(obj).
alias de type
Synonyme d’un type, cré é en affectant le type à un identifiant.
Les alias de types sont utiles pour simplifier les indications de types. Par exemple :
def remove_gray_shades(
colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
pass
class C:
field: 'annotation'
Les annotations de variables sont gé né ralement utilisé es pour des indications de types : par exemple, cette
variable devrait prendre des valeurs de type int :
count: int = 0
La syntaxe d’annotation de variable est expliqué e dans la section Les assignations annotées.
Reportez-vous à annotation de fonction, à la PEP 484 et à la PEP 526 qui dé crivent cette fonctionnalité . Voir
aussi annotations-howto sur les bonnes pratiques concernant les annotations.
environnement virtuel
Environnement d’exé cution isolé (en mode coopé ratif) qui permet aux utilisateurs de Python et aux applica-
tions d’installer et de mettre à jour des paquets sans interfé rer avec d’autres applications Python fonctionnant
sur le mê me systè me.
Voir aussi venv.
machine virtuelle
Ordinateur dé fini entiè rement par du logiciel. La machine virtuelle (virtual machine) de Python exé cute le
code intermédiaire produit par le compilateur de bytecode.
walrus operator
A light-hearted way to refer to the assignment expression operator := because it looks a bit like a walrus if
you turn your head.
Le zen de Python
Liste de principes et de pré ceptes utiles pour comprendre et utiliser le langage. Cette liste peut ê tre obtenue
en tapant ”import this” dans une invite Python interactive.
171
The Python Language Reference, Version 3.13.7
Python’s documentation is generated from reStructuredText sources using Sphinx, a documentation generator origi-
nally created for Python and now maintained as an independent project.
Le dé veloppement de la documentation et de ses outils est entiè rement basé sur le volontariat, tout comme Python.
Si vous voulez contribuer, allez voir la page reporting-bugs qui contient des informations pour vous y aider. Les
nouveaux volontaires sont toujours les bienvenus !
Merci beaucoup à :
— Fred L. Drake, Jr., the creator of the original Python documentation toolset and author of much of the content ;
— le projet Docutils pour avoir cré é reStructuredText et la suite d’outils Docutils ;
— Fredrik Lundh pour son projet Alternative Python Reference, dont Sphinx a pris beaucoup de bonnes idé es.
173
The Python Language Reference, Version 3.13.7
Histoire et licence
® Note
175
The Python Language Reference, Version 3.13.7
(1) GPL-compatible doesn’t mean that we’re distributing Python under the GPL. All Python licenses, unlike
the GPL, let you distribute a modified version without making your changes open source. The GPL-
compatible licenses make it possible to combine Python with other software that is released under the
GPL ; the others don’t.
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, because its license has a choice of law
clause. According to CNRI, however, Stallman’s lawyer has told CNRI’s lawyer that 1.6.1 is ”not incom-
patible” with the GPL.
Merci aux nombreux bé né voles qui ont travaillé sous la direction de Guido pour rendre ces versions possibles.
2. Subject to the terms and conditions of this License Agreement, PSF hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
analyze, test, perform and/or display publicly, prepare derivative works,
distribute, and otherwise use Python alone or in any derivative
version, provided, however, that PSF's License Agreement and PSF's notice of
copyright, i.e., "Copyright © 2001-2024 Python Software Foundation; All Rights
Reserved" are retained in Python alone or in any derivative version
prepared by Licensee.
2. Subject to the terms and conditions of this BeOpen Python License Agreement,
BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license
to reproduce, analyze, test, perform and/or display publicly, prepare derivative
works, distribute, and otherwise use the Software alone or in any derivative
version, provided, however, that the BeOpen Python License is retained in the
Software, alone or in any derivative version prepared by Licensee.
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR
ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING,
MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF
ADVISED OF THE POSSIBILITY THEREOF.
2. Subject to the terms and conditions of this License Agreement, CNRI hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
analyze, test, perform and/or display publicly, prepare derivative works,
distribute, and otherwise use Python 1.6.1 alone or in any derivative version,
provided, however, that CNRI's License Agreement and CNRI's notice of copyright,
i.e., "Copyright © 1995-2001 Corporation for National Research Initiatives; All
Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version
prepared by Licensee. Alternately, in lieu of CNRI's License Agreement,
Licensee may substitute the following text (omitting the quotes): "Python 1.6.1
is made available subject to the terms and conditions in CNRI's License
Agreement. This Agreement together with Python 1.6.1 may be located on the
internet using the following unique, persistent identifier (known as a handle):
1895.22/1013. This Agreement may also be obtained from a proxy server on the
internet using the following URL: [Link]
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI
MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY
OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF
PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR
ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE
THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting documentation, and that
the name of Stichting Mathematisch Centrum or CWI not be used in advertising or
publicity pertaining to distribution of the software without specific, written
prior permission.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
(suite sur la page suivante)
Permission to use, copy, modify, and distribute this Python software and
its associated documentation for any purpose without fee is hereby
granted, provided that the above copyright notice appears in all copies,
and that both that copyright notice and this permission notice appear in
supporting documentation, and that the name of neither Automatrix,
Bioreason or Mojam Media be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.
C.3.7 Appel de procédures distantes en XML (RPC, pour Remote Procedure Call)
Le module [Link] contient la note suivante :
The XML-RPC client interface is
SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
C.3.8 test_epoll
The test.test_epoll module contains the following notice :
Copyright (c) 2001-2006 Twisted Matrix Laboratories.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
C.3.10 SipHash24
Le fichier Python/pyhash.c contient une implé mentation par Marek Majkowski de l’algorithme SipHash24 de
Dan Bernstein. Il contient la note suivante :
<MIT License>
Copyright (c) 2013 Marek Majkowski <marek@[Link]>
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
</MIT License>
Original location:
[Link]
/****************************************************************
*
* The author of this software is David M. Gay.
*
* Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose without fee is hereby granted, provided that this entire notice
* is included in all copies of any software which is or includes a copy
* or modification of this software and in all copies of the supporting
* documentation for such software.
*
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*
***************************************************************/
C.3.12 OpenSSL
The modules hashlib, posix and ssl use the OpenSSL library for added performance if made available by the
operating system. Additionally, the Windows and macOS installers for Python may include a copy of the OpenSSL
libraries, so we include a copy of the OpenSSL license here. For the OpenSSL 3.0 release, and later releases derived
from that, the Apache License v2 applies :
Apache License
Version 2.0, January 2004
[Link]
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
(suite sur la page suivante)
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
C.3.13 expat
The pyexpat extension is built using an included copy of the expat sources unless the build is configured
--with-system-expat :
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
and Clark Cooper
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
C.3.14 libffi
The _ctypes C extension underlying the ctypes module is built using an included copy of the libffi sources unless
the build is configured --with-system-libffi :
Copyright (c) 1996-2008 Red Hat, Inc and others.
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
C.3.15 zlib
Le module zlib est compilé en utilisant une copie du code source de zlib si la version de zlib trouvé e sur le systè me
est trop vieille pour ê tre utilisé e :
Copyright (C) 1995-2011 Jean-loup Gailly and Mark Adler
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
C.3.16 cfuhash
L’implé mentation des dictionnaires, utilisé e par le module tracemalloc est basé e sur le projet cfuhash :
C.3.17 libmpdec
The _decimal C extension underlying the decimal module is built using an included copy of the libmpdec library
unless the build is configured --with-system-libmpdec :
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
C.3.19 mimalloc
MIT License :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
C.3.20 asyncio
Parts of the asyncio module are incorporated from uvloop 0.16, which is distributed under the MIT license :
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright
Voir Histoire et licence pour des informations complè tes concernant la licence et les permissions.
195
The Python Language Reference, Version 3.13.7
197
The Python Language Reference, Version 3.13.7
198 Index
The Python Language Reference, Version 3.13.7
Index 199
The Python Language Reference, Version 3.13.7
200 Index
The Python Language Reference, Version 3.13.7
Index 201
The Python Language Reference, Version 3.13.7
202 Index
The Python Language Reference, Version 3.13.7
chaining, 91 del
compile statement, 35, 103
built-in function, 109 deletion
complex attribute, 103
built-in function, 52 target, 103
number, 19 target list, 103
object, 19 delimiters, 16
complex literal, 14 descripteur, 159
compound destructor, 35, 100
statement, 111 dictionary
comprehensions, 79 comprehensions, 80
dictionary, 80 display, 80
list, 79 object, 21, 27, 38, 80, 86, 101
set, 80 dictionnaire, 159
Conditional dictionnaire en compréhension (ou dictionnaire
expression, 94 en intension), 159
conditional display
expression, 95 dictionary, 80
constant, 10 list, 79
constructor set, 80
class, 35 distribution simple, 169
container, 18, 27 division, 90
context, 158 division entière, 160
context management protocol, 158 divmod
context manager, 52 built-in function, 51
contigu, 158 docstring, 127
continue documentation string, 31
statement, 106, 112, 115 dunder, 159
conversion
arithmetic, 77 E
string, 37, 99 e
coroutine, 55, 81, 158 in numeric literal, 15
function, 24 EAFP, 159
CPython, 158 elif
current context, 158 keyword, 112
Ellipse
D object, 18
dangling else
else, 112 conditional expression, 95
data, 17 dangling, 112
type, 18 keyword, 106, 112, 113, 115
type, immutable, 78 empty
[Link] list, 79
module, 21 tuple, 20, 78
[Link] encodage du système de fichiers et
module, 21 gestionnaire d'erreurs associé,
debugging 160
assertions, 103 encodage régional, 164
decimal literal, 14 encodages de texte, 169
décorateur, 158 encoding declarations (source file), 6
DEDENT token, 7, 112 ensemble en compréhension (ou ensemble en inten-
def sion), 169
statement, 125 entrée de chemin, 167
default environment, 60
parameter value, 126 environnement virtuel, 171
definition error handling, 62
class, 104, 127 errors, 62
function, 104, 125 escape sequence, 10
Index 203
The Python Language Reference, Version 3.13.7
204 Index
The Python Language Reference, Version 3.13.7
Index 205
The Python Language Reference, Version 3.13.7
206 Index
The Python Language Reference, Version 3.13.7
Index 207
The Python Language Reference, Version 3.13.7
208 Index
The Python Language Reference, Version 3.13.7
Index 209
The Python Language Reference, Version 3.13.7
210 Index
The Python Language Reference, Version 3.13.7
Index 211