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

annotate function
   A callable that can be called to retrieve the *annotations* of an
   object. Annotate functions are usually *functions*, automatically
   generated as the "__annotate__" attribute of functions, classes,
   and modules. Annotate functions are a subset of *evaluate
   functions*.

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

   Annotations of local variables cannot be accessed at runtime, but
   annotations of global variables, class attributes, and functions
   can be retrieved by calling "annotationlib.get_annotations()" on
   modules, classes, and functions, respectively.

   See *variable annotation*, *function annotation*, **PEP 484**,
   **PEP 526**, and **PEP 649**, which describe this functionality.
   Also see Bonnes pratiques concernant les annotations for best
   practices on working with 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})

   * *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 *awaitable* 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 objet *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**.

atomic operation
   An operation that appears to execute as a single, indivisible step:
   no other thread can observe it half-done, and its effects become
   visible all at once.  Python does not guarantee that high-level
   statements are atomic (for example, "x += 1" performs multiple
   bytecode operations and is not atomic).  Atomicity is only
   guaranteed where explicitly documented.  See also *race condition*
   and *data race*.

attached thread state
   A *thread state* that is active for the current OS thread.

   When a *thread state* is attached, the OS thread has access to the
   full Python C API and can safely invoke the bytecode interpreter.

   Unless a function explicitly notes otherwise, attempting to call
   the C API without an attached thread state will result in a fatal
   error or undefined behavior.  A thread state can be attached and
   detached explicitly by the user through the C API, or implicitly by
   the runtime, including during blocking C calls and by the bytecode
   interpreter in between calls.

   On most builds of Python, having an attached thread state implies
   that the caller holds the *GIL* for the current interpreter, so
   only one OS thread can have an attached thread state at a given
   moment. In *free-threaded builds* of Python, threads can
   concurrently hold an attached thread state, allowing for true
   parallelism of the bytecode interpreter.

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 Names (identifiers and
   keywords), 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+'"), "sys.stdin.buffer", "sys.stdout.buffer", and
   instances of "io.BytesIO" and "gzip.GzipFile".

   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 "array.array", 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 :

      callable(argument1, argument2, argumentN)

   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():
              nonlocal x
              x += 1
              print(x)
          return inner

   Due to the "codeobject.co_freevars" attribute (which, despite its
   name, only includes the names of closure variables rather than
   listing all referenced free variables), the more general *free
   variable* term is sometimes 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 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.

concurrency
   The ability of a computer program to perform multiple tasks at the
   same time.  Python provides libraries for writing programs that
   make use of different forms of concurrency.  "asyncio" is a library
   for dealing with asynchronous tasks and coroutines.  "threading"
   provides access to operating system threads and "multiprocessing"
   to operating system processes. Multi-core processors can execute
   threads and processes on different CPU cores at the same time (see
   *parallelism*).

concurrent modification
   When multiple threads modify shared data at the same time.
   Concurrent modification without proper synchronization can cause
   *race conditions*, and might also trigger a *data race*, data
   corruption, or both.

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 key­value bindings associated with a particular
     "contextvars.Context" object and accessed via "ContextVar"
     objects.  Also see *context variable*.

   * A "contextvars.Context" 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 "contextvars.ContextVar"
   objects.  Context variables are primarily used to isolate state
   between concurrent 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 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*.

current context
   The *context* ("contextvars.Context" 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.

cyclic isolate
   A subgroup of one or more objects that reference each other in a
   reference cycle, but are not referenced by objects outside the
   group.  The goal of the *cyclic garbage collector* is to identify
   these groups and break the reference cycles so that the memory can
   be reclaimed.

data race
   A situation where multiple threads access the same memory location
   concurrently, at least one of the accesses is a write, and the
   threads do not use any synchronization to control their access.
   Data races lead to *non-deterministic* behavior and can cause data
   corruption. Proper use of *locks* and other *synchronization
   primitives* prevents data races.  Note that data races can only
   happen in native code, but that *native code* might be exposed in a
   Python API.  See also *race condition* and *thread-safe*.

deadlock
   A situation in which two or more tasks (threads, processes, or
   coroutines) wait indefinitely for each other to release resources
   or complete actions, preventing any from making progress.  For
   example, if thread A holds lock 1 and waits for lock 2, while
   thread B holds lock 2 and waits for lock 1, both threads will wait
   indefinitely.  In Python this often arises from acquiring multiple
   locks in conflicting orders or from circular join/await
   dependencies.  Deadlocks can be avoided by always acquiring
   multiple *locks* in a consistent order.  See also *lock* and
   *reentrant*.

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

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

evaluate function
   A function that can be called to evaluate a lazily evaluated
   attribute of an object, such as the value of type aliases created
   with the "type" statement.

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 "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
f-strings
   String literals prefixed with "f" or "F" are commonly called
   "f-strings" which is short for formatted string literals.  See also
   **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'exploitation 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
   "sys.getfilesystemencodeerrors()".

   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 interpreter.  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-threaded build
   A build of *CPython* that supports *free threading*, configured
   using the "--disable-gil" option before compilation.

   See Python support for free threading.

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

      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 *annotation de variable* et la **PEP 484**, qui décrivent
   cette fonctionnalité. Voir aussi Bonnes pratiques concernant les
   annotations sur les bonnes pratiques concernant les annotations.

__future__
   Une importation depuis le futur s'écrit "from __future__ import
   <fonctionnalité>". Lorsqu'une importation du futur est active dans
   un module, Python compile ce module avec une certaine modification
   de la syntaxe ou du comportement qui est vouée à devenir standard
   dans une version ultérieure. Le module "__future__" documente les
   possibilités pour *fonctionnalité*. L'importation a aussi l'effet
   normal d'importer une variable du module. Cette variable contient
   des informations utiles sur la fonctionnalité en question,
   notamment la version de Python dans laquelle elle a été ajoutée, et
   celle dans laquelle elle deviendra standard :

      >>> 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ératrice 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’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:

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

type générique
   Un *type* qui peut être paramétré ; généralement un conteneur comme
   "list" ou "dict". Utilisé pour les *indications 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 fonctionnalité dans
   les **PEP 483**, **PEP 484** et **PEP 585**.

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

   In prior versions of Python's C API, a function might declare that
   it requires the GIL to be held in order to use it. This refers to
   having an *attached thread state*.

global state
   Data that is accessible throughout a program, such as module-level
   variables, class variables, or C static variables in *extension
   modules*.  In multi-threaded programs, global state shared between
   threads typically requires synchronization to avoid *race
   conditions* and *data races*.

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

   Immortal objects can be identified via "sys._is_immortal()", or via
   "PyUnstable_IsImmortal()" in the C API.

immuable
   An object with a fixed value.  Immutable objects include numbers,
   strings and tuples.  Such an object cannot be altered.  A new
   object has to be created if a different value has to be stored.
   They play an important role in places where a constant hash value
   is needed, for example as a key in a dictionary.  Immutable objects
   are inherently *thread-safe* because their state cannot be modified
   after creation, eliminating concerns about improperly synchronized
   *concurrent modification*.

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.

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

index
   A numeric value that represents the position of an element in a
   *sequence*.

   In Python, indexing starts at zero. For example, "things[0]" names
   the *first* element of "things"; "things[1]" names the second one.

   In some contexts, Python allows negative indexes for counting from
   the end of a sequence, and indexing using *slices*.

   See also *subscript*.

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 Mode interactif.

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
   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
   further 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 Les types itérateurs.

   **Particularité de l'implémentation CPython :** CPython does not
   consistently apply the requirement that an iterator define
   "__iter__()". And also please note that *free-threaded* CPython
   does not guarantee *thread-safe* behavior of iterator operations.

key
   A value that identifies an entry in a *mapping*. See also
   *subscript*.

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

   There are several ways to create a key function.  For example. the
   "str.casefold()" method can serve as a key function for case
   insensitive sorts.  Alternatively, a key function can be built from
   a "lambda" expression such as "lambda r: (r[0], r[2])".  Also,
   "operator.attrgetter()", "operator.itemgetter()", and
   "operator.methodcaller()" are three key function constructors.  See
   the Sorting HOW TO for examples of how to create and use key
   functions.

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

   In a multi-threaded environment, the LBYL approach can risk
   introducing a *race condition* between "the looking" and "the
   leaping".  For example, the code, "if key in mapping: return
   mapping[key]" can fail if another thread removes *key* from
   *mapping* after the test, but before the lookup. This issue can be
   solved with *locks* or by using the *EAFP* approach.  See also
   *thread-safe*.

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.

lock
   A *synchronization primitive* that allows only one thread at a time
   to access a shared resource.  A thread must acquire a lock before
   accessing the protected resource and release it afterward.  If a
   thread attempts to acquire a lock that is already held by another
   thread, it will block until the lock becomes available.  Python's
   "threading" module provides "Lock" (a basic lock) and "RLock" (a
   *reentrant* lock).  Locks are used to prevent *race conditions* and
   ensure *thread-safe* access to shared data.  Alternative design
   patterns to locks exist such as queues, producer/consumer patterns,
   and thread-local state. See also *deadlock*, and *reentrant*.

lock-free
   An operation that does not acquire any *lock* and uses atomic CPU
   instructions to ensure correctness. Lock-free operations can
   execute concurrently without blocking each other and cannot be
   blocked by operations that hold locks. In *free-threaded* Python,
   built-in types like "dict" and "list" provide lock-free read
   operations, which means other threads may observe intermediate
   states during multi-step modifications even when those
   modifications hold the *per-object lock*.

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

   * "importlib.abc.Loader"

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

   "locale.getencoding()" can be used to get the locale encoding.

   Voir aussi l'*encodage du systèmes de fichiers et gestionnaire
   d'erreurs associé*.

méthode magique
   Un synonyme informel de *special method*.

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 mères
   abstraites des "tableaux de correspondances" (immuables) ou
   "tableaux de correspondances mutables" (voir les classes mères
   abstraites). 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é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 The Python 2.3 Method
   Resolution Order 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 "importlib.machinery.ModuleSpec".

   See also Spécificateurs de modules.

MRO
   Voir *ordre de résolution des méthodes*.

mutable
   An *object* with state that is allowed to change during the course
   of the program.  In multi-threaded programs, mutable objects that
   are shared between threads require careful synchronization to avoid
   *race conditions*.  See also *immutable*, *thread-safe*, and
   *concurrent modification*.

*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 "time.localtime()" et "os.stat()". Un autre exemple
   est "sys.float_info" :

      >>> sys.float_info[1]                   # indexed access
      1024
      >>> sys.float_info.max_exp              # named field access
      1024
      >>> isinstance(sys.float_info, tuple)   # kind of tuple
      True

   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 "typing.NamedTuple", or with the factory function
   "collections.namedtuple()".  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 "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
   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. Otherwise, it is recommended to
   use a *regular package*.

   For more information, see **PEP 420** and Paquets espaces de
   nommage.

   Voir aussi *module*.

native code
   Code that is compiled to machine instructions and runs directly on
   the processor, as opposed to code that is interpreted or runs in a
   virtual machine.  In the context of Python, native code typically
   refers to C, C++, Rust or Fortran code in *extension modules* that
   can be called from Python.  See also *extension 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
   Old name for the flavor of classes now used for all class objects.
   In earlier Python versions, only new-style classes could use
   Python's newer, versatile features like "__slots__", descriptors,
   properties, "__getattribute__()", class methods, and static
   methods.

non-deterministic
   Behavior where the outcome of a program can vary between executions
   with the same inputs.  In multi-threaded programs, non-
   deterministic behavior often results from *race conditions* where
   the relative timing or interleaving of threads affects the result.
   Proper synchronization using *locks* and other *synchronization
   primitives* helps ensure deterministic behavior.

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

optimized scope
   A scope where target local variable names are reliably known to the
   compiler when the code is compiled, allowing optimization of read
   and write access to these names. The local namespaces for
   functions, generators, coroutines, comprehensions, and generator
   expressions are optimized in this fashion. Note: most interpreter
   optimizations are applied to all scopes, only those relying on a
   known set of local and nonlocal variable names are restricted to
   optimized scopes.

optional module
   An *extension module* that is part of the *standard library*, but
   may be absent in some builds of *CPython*, usually due to missing
   third-party libraries or because the module is not available for a
   given platform.

   See Requirements for optional modules for a list of optional
   modules that require third-party libraries.

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

parallelism
   Executing multiple operations at the same time (e.g. on multiple
   CPU cores).  In Python builds with the *global interpreter lock
   (GIL)*, only one thread runs Python bytecode at a time, so taking
   advantage of multiple CPU cores typically involves multiple
   processes (e.g. "multiprocessing") or native extensions that
   release the GIL. In *free-threaded* Python, multiple Python threads
   can run Python code simultaneously on different cores.

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

        def func(posonly1, posonly2, /, positional_or_keyword): ...

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

per-object lock
   A *lock* associated with an individual object instance rather than
   a global lock shared across all objects. In *free-threaded* Python,
   built-in types like "dict" and "list" use per-object locks to allow
   concurrent operations on different objects while serializing
   operations on the same object. Operations that hold the per-object
   lock prevent other locking operations on the same object from
   proceeding, but do not block *lock-free* operations.

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*
   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 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 de
   Python). Une 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 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 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'

race condition
   A condition of a program where the behavior depends on the relative
   timing or ordering of events, particularly in multi-threaded
   programs.  Race conditions can lead to *non-deterministic* behavior
   and bugs that are difficult to reproduce.  A *data race* is a
   specific type of race condition involving unsynchronized access to
   shared memory.  The *LBYL* coding style is particularly susceptible
   to race conditions in multi-threaded code.  Using *locks* and other
   *synchronization primitives* helps prevent race conditions.

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
   "sys.getrefcount()" 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*.

reentrant
   A property of a function or *lock* that allows it to be called or
   acquired multiple times by the same thread without causing errors
   or a *deadlock*.

   For functions, reentrancy means the function can be safely called
   again before a previous invocation has completed, which is
   important when functions may be called recursively or from signal
   handlers. Thread-unsafe functions may be *non-deterministic* if
   they're called reentrantly in a multithreaded program.

   For locks, Python's "threading.RLock" (reentrant lock) is
   reentrant, meaning a thread that already holds the lock can acquire
   it again without blocking.  In contrast, "threading.Lock" is not
   reentrant - attempting to acquire it twice from the same thread
   will cause a deadlock.

   See also *lock* and *deadlock*.

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 "collections.abc.Sequence" 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ésultats. "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
   An object of type "slice", used to describe a portion of a
   *sequence*. A slice object is created when using the slicing form
   of subscript notation, with colons inside square brackets, such as
   in "variable_name[1:3:5]".

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 interpreter package.
   The exact membership of the collection may vary based on platform,
   available system libraries, or other criteria.  Documentation can
   be found at La bibliothèque standard.

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

subscript
   The expression in square brackets of a subscription expression, for
   example, the "3" in "items[3]". Usually used to select an element
   of a container. Also called a *key* when subscripting a *mapping*,
   or an *index* when subscripting a *sequence*.

synchronization primitive
   A basic building block for coordinating (synchronizing) the
   execution of multiple threads to ensure *thread-safe* access to
   shared resources. Python's "threading" module provides several
   synchronization primitives including "Lock", "RLock", "Semaphore",
   "Condition", "Event", and "Barrier".  Additionally, the "queue"
   module provides multi-producer, multi-consumer queues that are
   especially useful in multithreaded programs. These primitives help
   prevent *race conditions* and coordinate thread execution.  See
   also *lock*.

t-string
t-strings
   String literals prefixed with "t" or "T" are commonly called
   "t-strings" which is short for template string literals.

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 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'"), "sys.stdin", "sys.stdout"
   et les instances de "io.StringIO".

   Voir aussi *fichier binaire* pour un objet fichier capable de lire
   et d'écrire des *objets octets-compatibles*.

thread state
   The information used by the *CPython* runtime to run in an OS
   thread. For example, this includes the current exception, if any,
   and the state of the bytecode interpreter.

   Each thread state is bound to a single OS thread, but threads may
   have many thread states available.  At most, one of them may be
   *attached* at once.

   An *attached thread state* is required to call most of Python's C
   API, unless a function explicitly documents otherwise. The bytecode
   interpreter only runs under an attached thread state.

   Each thread state belongs to a single interpreter, but each
   interpreter may have many thread states, including multiple for the
   same OS thread. Thread states from multiple interpreters may be
   bound to the same thread, but only one can be *attached* in that
   thread at any given moment.

   See Thread State and the Global Interpreter Lock for more
   information.

thread-safe
   A module, function, or class that behaves correctly when used by
   multiple threads concurrently.  Thread-safe code uses appropriate
   *synchronization primitives* like *locks* to protect shared mutable
   state, or is designed to avoid shared mutable state entirely.  In
   the *free-threaded* build, built-in types like "dict", "list", and
   "set" use internal locking to make many operations thread-safe,
   although thread safety is not necessarily guaranteed.  Code that is
   not thread-safe may experience *race conditions* and *data races*
   when used in multi-threaded programs.

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

   pourrait être rendu plus lisible comme ceci :

      Color = tuple[int, int, int]

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

   Voir "typing" et la **PEP 484**, qui décrivent cette
   fonctionnalité.

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

   Type hints are optional and are not enforced by Python but they are
   useful to *static type checkers*. They can also aid IDEs with code
   completion and refactoring.

   Les indications de type de variables globales, d'attributs de
   classe et de fonctions, mais pas de variables locales, peuvent être
   consultées en utilisant "typing.get_type_hints()".

   Voir "typing" et la **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 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 Bonnes
   pratiques concernant les annotations 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 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 *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.
