1. Introduction
***************

Ce manuel de référence décrit le langage de programmation Python. Il
n'a pas vocation à être un tutoriel.

Nous essayons d'être le plus précis possible et nous utilisons le
français (NdT : ou l’anglais pour les parties qui ne sont pas encore
traduites) plutôt que des spécifications formelles, sauf pour la
syntaxe et l’analyse lexicale. Nous espérons ainsi rendre ce document
plus compréhensible pour un grand nombre de lecteurs, même si cela
laisse un peu de place à l’ambiguïté. En conséquence, si vous arrivez
de Mars et que vous essayez de ré-implémenter Python à partir de cet
unique document, vous devrez faire des hypothèses et, finalement, vous
aurez certainement implémenté un langage sensiblement différent. D’un
autre côté, si vous utilisez Python et que vous vous demandez quelles
règles s’appliquent pour telle partie du langage, vous devriez trouver
une réponse satisfaisante ici. Si vous souhaitez voir une définition
plus formelle du langage, nous acceptons toutes les bonnes volontés
(ou bien inventez une machine pour nous cloner ☺).

S’agissant du manuel de référence d’un langage, il est dangereux de
rentrer profondément dans les détails d’implémentation ;
l’implémentation peut changer et d’autres implémentations du même
langage peuvent fonctionner différemment. En même temps, CPython est
l’implémentation de Python la plus répandue (bien que d’autres
implémentations gagnent en popularité) et certaines de ses bizarreries
méritent parfois d’être mentionnées, en particulier lorsque
l’implémentation impose des limitations supplémentaires. Par
conséquent, vous trouvez de courtes "notes d’implémentation"
saupoudrées dans le texte.

Chaque implémentation de Python est livrée avec un certain nombre de
modules natifs. Ceux-ci sont documentés dans La bibliothèque standard.
Quelques modules natifs sont mentionnés quand ils interagissent
significativement avec la définition du langage.


1.1. Autres implémentations
===========================

Bien qu’il existe une implémentation Python qui soit de loin la plus
populaire, il existe d’autres implémentations qui présentent un
intérêt particulier pour différents publics.

Parmi les implémentations les plus connues, nous pouvons citer :

CPython
   C’est l’implémentation originelle et la plus entretenue de Python,
   écrite en C. Elle implémente généralement en premier les nouvelles
   fonctionnalités du langage.

Jython
   Python implemented in Java.  This implementation can be used as a
   scripting language for Java applications, or can be used to create
   applications using the Java class libraries.  It is also often used
   to create tests for Java libraries. More information can be found
   at the Jython website.

Python pour .NET
   Cette implémentation utilise en fait l’implémentation CPython, mais
   c’est une application .NET et permet un accès aux bibliothèques
   .NET. Elle a été créée par Brian Lloyd. Pour plus d’informations,
   consultez la page d’accueil Python pour .NET (site en anglais).

IronPython
   An alternate Python for .NET.  Unlike Python.NET, this is a
   complete Python implementation that generates IL, and compiles
   Python code directly to .NET assemblies.  It was created by Jim
   Hugunin, the original creator of Jython.  For more information, see
   the IronPython website.

PyPy
   An implementation of Python written completely in Python. It
   supports several advanced features not found in other
   implementations like stackless support and a Just in Time compiler.
   One of the goals of the project is to encourage experimentation
   with the language itself by making it easier to modify the
   interpreter (since it is written in Python).  Additional
   information is available on the PyPy project's home page.

Chacune de ces implémentations diffère d'une manière ou d'une autre
par rapport au langage décrit dans ce manuel, ou comporte des
spécificités que la documentation standard de Python ne couvre pas.
Reportez-vous à la documentation spécifique à l'implémentation pour
déterminer ce que vous devez savoir sur l'implémentation que vous
utilisez.


1.2. Notations
==============

Les descriptions de l'analyse lexicale et de la syntaxe utilisent une
notation de grammaire BNF modifiée. Le style utilisé est le suivant :

   name      ::= lc_letter (lc_letter | "_")*
   lc_letter ::= "a"..."z"

La première ligne indique qu'un "name" est un "lc_letter" suivi d'une
suite de zéro ou plus "lc_letter"s ou tiret bas. Un "lc_letter" est, à
son tour, l'un des caractères "'a'" à "'z'" (cette règle est
effectivement respectée pour les noms définis dans les règles
lexicales et grammaticales de ce document).

Chaque règle commence par un nom (qui est le nom que la règle définit)
et "::=". Une barre verticale ("|") est utilisée pour séparer les
alternatives ; c'est l'opérateur le moins prioritaire de cette
notation. Une étoile ("*") signifie zéro ou plusieurs répétitions de
l'élément précédent ; de même, un plus ("+") signifie une ou plusieurs
répétitions, et une expression entre crochets ("[ ]") signifie zéro ou
une occurrence (en d'autres termes, l'expression encadrée est
facultative). Les opérateurs "*" et "+" agissent aussi étroitement que
possible ; les parenthèses sont utilisées pour le regroupement. Les
chaînes littérales sont entourées de guillemets anglais """. L'espace
n'est utilisée que pour séparer les lexèmes. Les règles sont
normalement contenues sur une seule ligne ; les règles avec de
nombreuses alternatives peuvent être formatées avec chaque ligne
représentant une alternative (et donc débutant par une barre
verticale, sauf la première).

Dans les définitions lexicales (comme dans l'exemple ci-dessus), deux
autres conventions sont utilisées : deux caractères littéraux séparés
par des points de suspension signifient le choix d'un seul caractère
dans la plage donnée (en incluant les bornes) de caractères ASCII. Une
phrase entre les signes inférieur et supérieur ("<...>") donne une
description informelle du symbole défini ; par exemple, pour décrire
la notion de "caractère de contrôle" si nécessaire.

Même si la notation utilisée est presque la même, il existe une grande
différence entre la signification des définitions lexicales et
syntaxiques : une définition lexicale opère sur les caractères
individuels de l'entrée, tandis qu'une définition syntaxique opère sur
le flux de lexèmes générés par l'analyse lexicale. Toutes les
notations sous la forme BNF dans le chapitre suivant (« Analyse
lexicale ») sont des définitions lexicales ; les notations dans les
chapitres suivants sont des définitions syntaxiques.
