# Glossaire

`>>>`

  L’invite de commande utilisée par défaut dans l’interpréteur interactif. On la voit souvent dans des exemples de code qui peuvent être exécutés interactivement dans l’interpréteur.

`...`

  L’invite de commande utilisée par défaut dans l’interpréteur interactif lorsqu’on entre un bloc de code indenté, dans des délimiteurs fonctionnant par paires (parenthèses, crochets, accolades, triple guillemets), ou après un décorateur.

2to3

  Outil qui essaie de convertir du code pour Python 2.x en code pour Python 3.x en gérant la plupart des incompatibilités qui peuvent être détectées en analysant la source et parcourant son arbre syntaxique.

  2to3 est disponible dans la bibliothèque standard sous le nom de `lib2to3` ; un point d’entrée indépendant est fourni via `Tools/scripts/2to3`. Cf. 2to3 — Traduction automatique de code en Python 2 vers Python 3.

classe de base abstraite

  Les classes de base 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 nombreuses ABC pour les structures de données (dans le module `collections.abc`), les nombres (dans le module `numbers`), les flux (dans le module `io`) et les chercheurs-chargeurs du système d’importation (dans le module `importlib.abc`). 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 variable annotation, function annotation, PEP 484 et PEP 526, qui décrivent cette fonctionnalité.

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})

  - 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 parameter 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 `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 asynchronous generator iterator. 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`.

  Usually refers to an asynchronous generator function, but may refer to an asynchronous generator iterator in some contexts. In cases where the intended meaning isn’t clear, using the full terms avoids ambiguity.

  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

  Objet créé par une fonction asynchronous generator.

  This is an asynchronous iterator which when called using the `__anext__()` method returns an awaitable object which will execute the body of the asynchronous generator function until the next `yield` expression.

  Chaque `yield` suspend temporairement l’exécution, en gardant en mémoire l’endroit et l’état de l’exécution (ce qui inclut les variables locales et les try en cours). Lorsque l’exécution de l’itérateur de générateur asynchrone reprend avec un nouvel awaitable renvoyé par `__anext__()`, elle repart de là où elle s’était arrêtée. Voir la PEP 492 et la 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

  An object that implements the `__aiter__()` and `__anext__()` methods. `__anext__` must return an awaitable object. `async for` resolves the awaitables returned by an asynchronous iterator’s `__anext__()` method until it raises a `StopAsyncIteration` exception. Introduced by PEP 492.

attribut

  Valeur associée à un objet et désignée par son nom via une notation utilisant des points. Par exemple, si un objet o possède un attribut a, il sera référencé par o.a.

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

  Un file object capable de lire et d’écrire des bytes-like objects. Des fichiers binaires sont, par exemple, les fichiers ouverts en mode binaire (`'rb'`, `'wb'`, ou `'rb+'`), `sys.stdin.buffer`, `sys.stdout.buffer`, les instances de `io.BytesIO` ou de `gzip.GzipFile`.

  Consultez fichier texte, un objet fichier capable de lire et d’écrire des objets `str`.

objet octet-compatible

  Un objet gérant les Protocole tampon et pouvant exporter un tampon (buffer en anglais) C-contiguous. Cela inclut les objets `bytes`, `bytearray` et `array.array`, ainsi que beaucoup d’objets `memoryview`. Les objets bytes-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 (« read-only bytes-like objects »), par exemples `bytes` ou `memoryview` d’un objet `byte`.

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.

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).

coercition

  Conversion implicite d’une instance d’un type vers un autre lors d’une opération dont les deux opérandes doivent être de même type. Par exemple `int(3.15)` convertit explicitement le nombre à virgule flottante en nombre entier `3`. Mais dans l’opération `3 + 4.5`, les deux opérandes sont d’un type différent, alors qu’elles doivent avoir le même type pour être additionnées (sinon une exception `TypeError` serait levée). Sans coercition, toutes les opérandes, même de types compatibles, devraient être converties (on parle aussi de cast) explicitement par le développeur, par exemple : `float(3) + 4.5` au lieu du simple `3 + 4.5`.

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 multiplié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.

gestionnaire de contexte

  Objet contrôlant l’environnement à l’intérieur d’un bloc `with` en définissant les méthodes `__enter__()` et `__exit__()`. Consultez la PEP 343.

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ées 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 python.org. Le terme « CPython » est utilisé dans certains contextes lorsqu’il est nécessaire de distinguer cette implémentation des autres comme Jython ou IronPython.

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(...):
          ...
      f = staticmethod(f)

      @staticmethod
      def f(...):
          ...

  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

  N’importe quel objet définissant les méthodes `__get__()`, `__set__()`, ou `__delete__()`. Lorsque l’attribut d’une classe est un descripteur, son comportement spécial est déclenché lors de la recherche des attributs. Normalement, lorsque vous écrivez a.b pour obtenir, affecter ou effacer un attribut, Python recherche l’objet nommé b dans le dictionnaire de la classe de a. Mais si b est un descripteur, c’est la méthode de ce descripteur qui est alors appelée. Comprendre les descripteurs est requis pour avoir une compréhension approfondie de Python, ils sont la base de nombre de ses caractéristiques notamment les fonctions, méthodes, propriétés, méthodes de classes, méthodes statiques et les références aux classes parentes.

  Pour plus d’informations sur les méthodes des descripteurs, consultez Implémentation de descripteurs.

dictionnaire

  Structure de donnée associant des clés à des valeurs. Les clés peuvent être n’importe quel objet possédant les méthodes `__hash__()` et `__eq__()`. En Perl, les dictionnaires sont appelés « hash ».

vue de dictionnaire

  Objets retournés par les méthodes `dict.keys()`, `dict.values()` et `dict.items()`. 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 Les vues de dictionnaires.

docstring (chaîne de documentation)

  Première chaîne littérale qui apparaît dans l’expression d’une classe, fonction, ou module. Bien qu’ignorée à l’exécution, elle est reconnue par le compilateur et placée dans l’attribut `__doc__` de la classe, de la fonction ou du module. Comme cette chaîne est disponible par introspection, c’est l’endroit idéal pour documenter l’objet.

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 de base abstraites. À la place, le duck-typing utilise plutôt `hasattr()` ou la programmation EAFP.

EAFP

  Il est plus simple de demander pardon que demander la permission (Easier to Ask for Forgiveness than Permission 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.

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’attributs, 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 `if`. 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

  Objet exposant une ressource via une API orientée fichier (avec les méthodes `read()` ou `write()`). En fonction de la manière dont il a été créé, un objet fichier peut interfacer l’accès à un fichier sur le disque ou à un autre type de stockage ou de communication (typiquement l’entrée standard, la sortie standard, un tampon en mémoire, un connecteur réseau…). Les objets fichiers sont aussi appelés file-like-objects ou 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.

chercheur

  Objet qui essaie de trouver un chargeur pour le module en cours d’importation.

  Depuis Python 3.3, il existe deux types de chercheurs : les chercheurs dans les méta-chemins à utiliser avec `sys.meta_path` ; les chercheurs d’entrée dans path à utiliser avec `sys.path_hooks`.

  Voir les PEP 302, PEP 420 et PEP 451 pour plus de détails.

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.

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.

  Function annotations are usually used for type hints: for example, this function is expected to take two `int` arguments and is also expected to have an `int` return value:

      def sum_two_numbers(a: int, b: int) -> int:
         return a + b

  L’annotation syntaxique de la fonction est expliquée dans la section Définition de fonctions.

  Voir variable annotation et PEP 484, qui décrivent cette fonctionnalité.

__future__

  Pseudo-module que les développeurs peuvent utiliser pour activer de nouvelles fonctionnalités du langage qui ne sont pas compatibles avec l’interpréteur utilisé.

  En important le module `__future__` et en affichant ses variables, vous pouvez voir à quel moment une nouvelle fonctionnalité a été rajoutée dans le langage et quand elle devient le comportement par défaut :

      >>> import __future__
      >>> __future__.division
      _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

ramasse-miettes

  (garbage collection en anglais) Mécanisme permettant de libérer de la mémoire lorsqu’elle n’est plus utilisé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érateur mais peut faire référence à un itérateur de générateur dans certains contextes. Dans les cas où le sens voulu n’est pas clair, utiliser les termes complets lève l’ambigüité.

itérateur de générateur

  Objet créé par une fonction générateur.

  Chaque `yield` suspend temporairement l’exécution, en se rappelant l’endroit et l’état de l’exécution (y compris les variables locales et les try en cours). Lorsque l’itérateur de générateur reprend, il repart là où il en était (contrairement à une fonction qui prendrait un nouveau départ à chaque invocation).

expression génératrice

  Expression qui donne un itérateur. Elle ressemble à une expression normale, suivie d’une expression `for` définissant une variable de boucle, un intervalle et une expression `if` optionnelle. Toute cette expression génère des valeurs pour la fonction qui l’entoure :

      >>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
      285

fonction générique

  Fonction composée de plusieurs fonctions implémentant les mêmes opérations pour différents types. L’implémentation à utiliser est déterminée lors de l’appel par l’algorithme de répartition.

  Voir aussi single dispatch, le décorateur `functools.singledispatch()` et la PEP 443.

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.

  Les tentatives précédentes d’implémenter un interpréteur Python avec une granularité de verrouillage plus fine ont toutes échouées, à cause de leurs mauvaises performances dans le cas d’un processeur unique. Il est admis que corriger ce problème de performance induit mènerait à une implémentation beaucoup plus compliquée et donc plus coûteuse à maintenir.

hachable

  Un objet est hachable s’il a une empreinte (hash) qui ne change jamais (il doit donc implémenter une méthode `__hash__()`) et s’il peut être comparé à d’autres objets (avec la méthode `__eq__()`). Les objets hachables dont la comparaison par `__eq__` est vraie doivent avoir la même empreinte.

  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.

  Tous les types immuables natifs de Python sont hachables, mais les conteneurs muables (comme les listes ou les dictionnaires) ne le sont pas. Toutes 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 de développement intégré pour Python. IDLE est un éditeur basique et un interpréteur livré avec la distribution standard de Python.

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 `sys.path` ; pour les sous-paquets, elle peut aussi venir de l’attribut `__path__` du paquet parent.

importer

  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 a un interpréteur interactif, ce qui signifie que vous pouvez écrire des expressions et des instructions à l’invite de l’interpréteur. L’interpréteur Python va les exécuter immédiatement et vous en présenter le résultat. Démarrez juste `python` (probablement depuis le menu principal de votre ordinateur). C’est un moyen puissant pour tester de nouvelles idées ou étudier de nouveaux modules (souvenez-vous de `help(x)`).

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 graduellement 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

  Objet capable de renvoyer ses éléments un à un. Par exemple, tous les types séquence (comme `list`, `str`, et `tuple`), quelques autres types comme `dict`, objets fichiers ou tout objet d’une classe ayant une méthode `__iter__()` ou `__getitem__()` qui implémente la sémantique d’une Sequence.

  Les itérables peuvent être utilisés dans des boucles `for` et à beaucoup d’autres endroits où une séquence est requise (`zip()`, `map()`…). Lorsqu’un itérable est passé comme argument à la fonction native `iter()`, celle-ci fournit en retour un itérateur sur cet itérable. Cet itérateur n’est valable que pour une seule passe sur le jeu de valeurs. Lors de l’utilisation d’itérables, il n’est habituellement pas nécessaire d’appeler `iter()` ou de s’occuper soi-même des objets itérateurs. L’instruction `for` le fait automatiquement pour vous, créant une variable temporaire anonyme pour garder l’itérateur durant la boucle. Voir aussi itérateur, séquence et générateur.

itérateur

  Objet représentant un flux de donnée. Des appels successifs à la méthode `__next__()` de l’itérateur (ou le passer à la fonction native `next()`) donne successivement les objets du flux. Lorsque plus aucune donnée n’est disponible, une exception `StopIteration` est levée. À ce point, l’itérateur est épuisé et tous les appels suivants à sa méthode `__next__()` lèveront encore une exception `StopIteration`. Les itérateurs doivent avoir une méthode `__iter__()` qui renvoie l’objet itérateur lui-même, de façon à ce que chaque itérateur soit aussi itérable et puisse être utilisé dans la plupart des endroits où d’autres itérables sont attendus. Une exception notable est un code qui tente plusieurs itérations complètes. Un objet conteneur, (tel que `list`) produit un nouvel itérateur neuf à chaque fois qu’il est passé à la fonction `iter()` ou s’il est utilisé dans une boucle `for`. Faire ceci sur un itérateur donnerait simplement le même objet itérateur épuisé utilisé dans son itération précédente, le faisant ressembler à un conteneur vide.

  Vous trouverez davantage d’informations dans Les types itérateurs.

fonction clé

  Une fonction clé est un objet appelable qui renvoie une valeur à fins de tri ou de classement. Par exemple, la fonction `locale.strxfrm()` est utilisée pour générer une clé de classement prenant en compte les conventions 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 classés ou groupés. On peut citer les fonctions `min()`, `max()`, `sorted()`, `list.sort()`, `heapq.merge()`, `heapq.nsmallest()`, `heapq.nlargest()` et `itertools.groupby()`.

  Il existe plusieurs moyens de créer une fonction clé. Par exemple, la méthode `str.lower()` peut servir de fonction clé pour effectuer des recherches insensibles à la casse. Aussi, il est possible de créer des fonctions clés avec des expressions `lambda`, comme `lambda r: (r[0], r[2])`. Vous noterez que le module `operator` propose des constructeurs de fonctions clefs : `attrgetter()`, `itemgetter()` et `methodcaller()`. Voir Comment Trier pour des exemples de création et d’utilisation de fonctions clefs.

argument nommé

  Voir argument.

lambda

  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 engendrer 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.

list

  Un type natif de sequence dans Python. En dépit de son nom, une `list` ressemble plus à un tableau (array dans la plupart des langages) qu’à une liste chaînée puisque les accès se font en 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

  Objet qui charge un module. Il doit définir une méthode nommée `load_module()`. Un chargeur est typiquement donné par un chercheur. Voir la PEP 302 pour plus de détails et `importlib.ABC.Loader` pour sa classe de base abstraite.

tableau de correspondances

  (mapping en anglais) Conteneur permettant de rechercher des éléments à partir de clés et implémentant les méthodes spécifiées dans les classes de base abstraites `collections.abc.Mapping` ou `collections.abc.MutableMapping`. Les classes suivantes sont des exemples de tableaux de correspondances : `dict`, `collections.defaultdict`, `collections.OrderedDict` et `collections.Counter`.

chercheur dans les méta-chemins

  Un chercheur renvoyé par une recherche dans `sys.meta_path`. Les chercheurs dans les méta-chemins ressemblent, mais sont différents des chercheurs d’entrée dans path.

  Voir `importlib.abc.MetaPathFinder` pour les méthodes que les chercheurs dans les méta-chemins doivent implémenter.

métaclasse

  Classe d’une classe. Les définitions de classe créent un nom pour la classe, un dictionnaire de classe et une liste de classes parentes. La métaclasse a pour rôle de réunir ces trois paramètres pour construire la classe. La plupart des langages orientés objet fournissent une implémentation par défaut. La particularité de Python est la possibilité de créer des métaclasses personnalisées. La plupart des utilisateurs n’auront jamais besoin de cet outil, mais lorsque le besoin survient, les métaclasses offrent des solutions élégantes et puissantes. Elles 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éta-classes.

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

  L’ordre de résolution des méthodes (MRO pour Method Resolution Order en anglais) est, lors de la recherche d’un attribut dans les classes parentes, la façon dont l’interpréteur Python classe ces classes parentes. Voir The Python 2.3 Method Resolution Order pour plus de détails sur l’algorithme utilisé par l’interpréteur Python depuis la version 2.3.

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 `importlib.machinery.ModuleSpec`.

MRO

  Voir ordre de résolution des méthodes.

muable

  Un objet muable peut changer de valeur tout en gardant le même `id()`. Voir aussi immuable.

n-uplet nommé

  (named-tuple en anglais) Classe qui, comme un n-uplet (tuple en anglais), a ses éléments accessibles par leur indice. Et en plus, les éléments sont accessibles par leur nom. Par exemple, `time.localtime()` donne un objet ressemblant à un n-uplet, dont year est accessible par son indice : `t[0]` ou par son nom : `t.tm_year`).

  Un n-uplet nommé peut être un type natif tel que `time.struct_time` ou il peut être construit comme une simple classe. Un n-uplet nommé complet peut aussi être créé via la fonction `collections.namedtuple()`. Cette dernière approche fournit automatiquement des fonctionnalités supplémentaires, tel qu’une représentation lisible comme `Employee(name='jones', title='programmer')`.

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 `builtins.open` et `os.open()` 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 `random.seed()` ou `itertools.islice()` affiche clairement que ces fonctions sont implémentées respectivement dans les modules `random` et `itertools`.

paquet-espace de nommage

  Un paquet tel que défini dans la PEP 421 qui ne sert qu’à contenir des sous-paquets. Les paquets-espace de nommage peuvent n’avoir aucune représentation physique et, plus spécifiquement, ne sont pas comme un paquet classique puisqu’ils n’ont pas de fichier `__init__.py`.

  Voir aussi module.

portée imbriquée

  Possibilité de faire référence à une variable déclarée dans une définition englobante. Typiquement, une fonction définie à l’intérieur d’une autre fonction a accès aux variables de cette dernière. Souvenez-vous cependant que cela ne fonctionne que pour accéder à des variables, pas pour les assigner. Les variables locales sont lues et assignées dans l’espace de nommage le plus proche. Tout comme les variables globales qui sont stockés dans l’espace de nommage global, le mot clef `nonlocal` permet d’écrire dans l’espace de nommage dans lequel est déclarée la variable.

nouvelle classe

  Ancien nom pour l’implémentation actuelle des classes, pour tous les objets. Dans les anciennes versions de Python, seules les nouvelles classes pouvaient utiliser les nouvelles fonctionnalités telles que `__slots__`, les descripteurs, les propriétés, `__getattribute__()`, les méthodes de classe et les méthodes statiques.

objet

  N’importe quelle donnée comportant des états (sous forme d’attributs ou d’une valeur) et un comportement (des méthodes). C’est aussi (`object`) l’ancêtre commun à absolument toutes les nouvelles classes.

paquet

  module Python qui peut contenir des sous-modules ou des sous-paquets. Techniquement, un paquet est un module qui possède un attribut `__path__`.

  Voir aussi paquet classique et namespace package.

paramètre

  Entité nommée dans la définition d’une fonction (ou méthode), décrivant un argument (ou dans certains cas des arguments) que la fonction accepte. Il existe cinq sortes de paramètres :

  - positional-or-keyword : l’argument peut être passé soit par sa position, soit en tant que argument nommé. C’est le type de paramètre par défaut. Par exemple, foo et bar dans l’exemple suivant :

        def func(foo, bar=None): ...

  - positional-only: l’argument ne peut être donné que par sa position. Python n’a pas de syntaxe pour déclarer de tels paramètres, cependant des fonctions natives, comme `abs()`, en utilisent.

  - 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 :

        def func(arg, *, kw_only1, kw_only2): ...

  - 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 :

        def func(*args, **kwargs): ...

  - 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 `inspect.Parameter`, 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 `importlib.abc.PathEntryFinder` pour les méthodes qu’un chercheur d’entrée dans path doit implémenter.

point d’entrée pour la recherche dans path

  Appelable dans la liste `sys.path_hook` qui donne un chercheur d’entrée dans path s’il sait où trouver des modules pour une entrée dans path donnée.

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 importations.

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 `os.PathLike`. Un objet qui accepte le protocole `os.PathLike` peut être converti en un chemin `str` ou `bytes` du système de fichiers en appelant la fonction `os.fspath()`. `os.fsdecode()` et `os.fsencode()` 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 Python). Un PEP est un document de conception 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 PEPs sont censés ê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 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 suppression 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 longtemps 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 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 :

      for piece in food:
          print(piece)

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'
      >>> C.D.meth.__qualname__
      'C.D.meth'

  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 : `email.mime.text` :

      >>> import email.mime.text
      >>> email.mime.text.__name__
      'email.mime.text'

nombre de références

  Nombre de références à un objet. Lorsque le nombre de références à un objet descend à zéro, l’objet est désalloué. Le comptage de référence n’est généralement pas visible dans le code Python, mais c’est un élément clé de l’implémentation CPython. Le module `sys` définit une fonction `getrefcount()` que les développeurs peuvent utiliser pour obtenir le nombre de références à un objet donné.

paquet classique

  paquet traditionnel, tel qu’un dossier contenant un fichier `__init__.py`.

  Voir aussi paquet-espace de nommage.

`__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

  itérable qui offre un accès efficace à ses éléments par un indice sous forme de nombre entier via la méthode spéciale `__getitem__()` et qui définit une méthode `__len__()` donnant sa taille. Voici quelques séquences natives : `list`, `str`, `tuple`, et `bytes`. Notez que `dict` possède aussi une méthode `__getitem__()` et une méthode `__len__()`, mais il est considéré comme un mapping plutôt qu’une séquence, car ses accès se font par une clé arbitraire immuable plutôt qu’un nombre entier.

  La classe abstraite de base `collections.abc.Sequence` définit une interface plus riche qui va au-delà des simples `__getitem__()` et `__len__()`, en ajoutant `count()`, `index()`, `__contains__()` et `__reversed__()`. Les types qui implémentent cette interface étendue peuvent s’enregistrer explicitement en utilisant `register()`.

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.

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.

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`.

struct sequence

  A tuple with named elements. Struct sequences expose an interface similar to named tuple in that elements can be accessed either by index or as an attribute. However, they do not have any of the named tuple methods like `_make()` or `_asdict()`. Examples of struct sequences include `sys.float_info` and the return value of `os.stat()`.

encodage de texte

  Codec (codeur-décodeur) qui convertit des chaînes de caractères Unicode en octets (classe bytes).

fichier texte

  file object 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”text encoding automatiquement. Des exemples de fichiers textes sont les fichiers ouverts en mode texte (`'r'` ou `'w'`), `sys.stdin`, `sys.stdout` et les instances de `io.StringIO`.

  Voir aussi binary file pour un objet fichier capable de lire et d’écrire bytes-like objects.

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

  Le type d’un objet Python détermine quel genre d’objet c’est. Tous les objets ont un type. Le type d’un objet peut être obtenu via son attribut `__class__` ou via `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 :

      from typing import List, Tuple

      def remove_gray_shades(
              colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]:
          pass

  pourrait être rendu plus lisible comme ceci :

      from typing import List, Tuple

      Color = Tuple[int, int, int]

      def remove_gray_shades(colors: List[Color]) -> List[Color]:
          pass

  Voir `typing` et PEP 484, qui décrivent cette fonctionnalité.

indication de type

  Le annotation qui spécifie le type attendu pour une variable, un attribut de classe, un paramètre de fonction ou une valeur de retour.

  Les indications de type sont facultatives et ne sont pas indispensables à l’interpréteur Python, mais elles sont utiles aux outils d’analyse de type statique et aident les IDE à compléter et à réusiner (code refactoring en anglais) le code.

  Les indicateurs de type de variables globales, d’attributs de classe et de fonctions, mais pas de variables locales, peuvent être consultés en utilisant `typing.get_type_hints()`.

  Voir `typing` et PEP 484, qui décrivent cette fonctionnalité.

retours à la ligne universels

  Une manière d’interpréter des flux de texte dans lesquels sont reconnues toutes les fins de ligne suivantes : la convention Unix `'\n'`, la convention Windows `'\r\n'` et l’ancienne convention Macintosh `'\r'`. Voir la PEP 278 et la PEP 3116, ainsi que la fonction `bytes.splitlines()` pour d’autres usages.

annotation de variable

  annotation d’une variable ou d’un attribut de classe.

  Lorsque vous annotez une variable ou un attribut de classe, l’affectation est facultative :

      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 la variable est expliquée dans la section Les assignations annotées.

  Reportez-vous à function annotation, à la PEP 484 et à la PEP 526 qui décrivent cette fonctionnalité.

environnement virtuel

  Environnement d’exécution isolé (en mode coopératif) qui permet aux utilisateurs de Python et aux applications 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 bytecode produit par le compilateur de bytecode.

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.