langage de programmation généraliste de haut niveau qui privilégie la lisibilité , la simplicité et la facilité d'écriture du code grâce à une indentation significative , une bibliothèque standard complète et un ramasse -miettes . Python prend en charge plusieurs paradigmes de programmation, mais avec une prédominance pour la programmation orientée objet et le typage dynamique .
Guido van Rossum a commencé à travailler sur Python à la fin des années 1980 comme successeur du langage de programmation ABC . Python 3.0, sorti en 2008, constituait une refonte majeure et n'était pas entièrement rétrocompatible avec les versions précédentes. À partir de Python 3.5, des fonctionnalités et des mots-clés de typage ont été ajoutés au langage, permettant un typage statique optionnel . Python Software Foundation prend en charge Python 3.10, 3.11, 3.12, 3.13 et 3.14, conformément au cycle de publication annuel du projet et à sa politique de support de cinq ans. Python 3.15 est actuellement en phase de développement bêta et sa version stable devrait être disponible en octobre 2026. Les versions antérieures de la série 3.x ne sont plus prises en charge et ne reçoivent plus de mises à jour de sécurité.
Python est largement utilisé dans la communauté de l'apprentissage automatique . Il est fréquemment enseigné comme langage de programmation d'introduction. Depuis 2003, Python figure régulièrement parmi les dix langages de programmation les plus populaires dans l' indice TIOBE de la communauté de programmation , qui classe les langages de programmation en fonction des recherches effectuées sur 24 plateformes.
Python a été conçu à la fin des années 1980 par Guido van Rossum au Centrum Wiskunde & Informatica (CWI) aux Pays-Bas . Il a été pensé comme successeur du langage de programmation ABC , lui-même inspiré de SETL , capable de gérer les exceptions et d'interagir avec le système d'exploitation Amoeba . Le développement de Python a débuté en décembre 1989. Van Rossum l'a publié pour la première fois en 1991 sous le nom de Python 0.9.0. Il a assumé l'entière responsabilité du projet, en tant que développeur principal, jusqu'au 12 juillet 2018, date à laquelle il a annoncé son retrait définitif de ses fonctions de « dictateur bienveillant à vie » (BDFL) de Python ; ce titre lui avait été attribué par la communauté Python en reconnaissance de son engagement de longue date en tant que principal décideur du projet. En janvier 2019, les développeurs principaux actifs de Python ont élu un conseil de pilotage de cinq membres pour diriger le projet.
Le nom Python est tiré de la série humoristique britannique Monty Python's Flying Circus . (Voir les compréhensions de listes , le ramasse -miettes avec détection de cycles , le comptage de références et la prise en charge d'Unicode . La fin de vie de Python 2.7 était initialement prévue pour 2015, puis reportée à 2020, car une grande partie du code existant ne pouvait pas être facilement portée vers Python 3. Il ne reçoit plus de correctifs de sécurité ni de mises à jour. Bien que Python 2.7 et les versions antérieures ne soient plus officiellement prises en charge, une autre implémentation non officielle de Python, PyPy , continue de prendre en charge Python 2, c'est-à-dire « 2.7.18+ » (plus 3.11 ), le « + » indiquant (au moins en partie) l' intégration de correctifs de sécurité.
Python 3.0 a été publié le 3 décembre 2008. Il s'agissait d'une révision majeure, non entièrement rétrocompatible avec les versions précédentes, avec de nouvelles sémantiques et une syntaxe modifiée. Python 2.7.18, publié en 2020, était la dernière version de Python 2. Plusieurs versions de la série Python 3.x ont ajouté de la nouvelle syntaxe au langage et apporté quelques modifications (considérées comme mineures) incompatibles avec les versions précédentes.
langage de programmation multi-paradigme . La programmation orientée objet et la programmation structurée sont pleinement prises en charge, et nombre de ses fonctionnalités permettent la programmation fonctionnelle et la programmation orientée aspect , notamment la métaprogrammation et les métaobjets . De nombreux autres paradigmes sont pris en charge via des extensions, comme la conception par contrat et la programmation logique . Python est souvent qualifié de « langage d'assemblage » car il est conçu spécifiquement pour intégrer des composants écrits dans d'autres langages.
Python utilise le typage dynamique et une combinaison de comptage de références et d'un ramasse-miettes détectant les cycles pour la gestion de la mémoire . Il utilise la résolution dynamique des noms ( liaison tardive ), qui lie les noms de méthodes et de variables pendant l'exécution du programme.
La conception de Python offre un certain soutien à la programmation fonctionnelle dans la tradition Lisp . Elle comprend des fonctions `map`, `filter` et `map`, de listes , des dictionnaires , des ensembles et des expressions génératrices . La bibliothèque standard contient deux modules (` map` et `filter` ) qui implémentent des outils fonctionnels empruntés à Haskell et Standard ML .
La philosophie de base de Python est résumée dans le Zen de Python (PEP 20) écrit par Tim Peters , qui comprend des aphorismes tels que ceux-ci :
- L'explicite vaut mieux que l'implicite.
- La simplicité est préférable à la complexité.
- La lisibilité est importante.
- Les cas particuliers ne sont pas suffisamment exceptionnels pour justifier une enfreint les règles.
- Bien que le pragmatisme l'emporte sur la perfection, les erreurs ne doivent jamais passer inaperçues, à moins d'être explicitement passées sous silence.
- Il devrait y avoir une seule façon évidente de le faire, et de préférence une seule.
Cependant, Python a été critiqué pour avoir enfreint ces principes et alourdi inutilement le langage. Les réponses à ces critiques soulignent que le Zen de Python est une ligne directrice plutôt qu'une règle. L'ajout de certaines nouvelles fonctionnalités a suscité la controverse : Guido van Rossum a démissionné de son poste de « dictateur bienveillant à vie » suite à un conflit concernant l'ajout de l'opérateur d'expression d'affectation dans extensible grâce à ses modules. Cette modularité compacte l'a rendu particulièrement populaire comme moyen d'ajouter des interfaces programmables à des applications existantes. La vision de Van Rossum d'un langage à noyau réduit doté d'une vaste bibliothèque standard et d'un interpréteur facilement extensible découlait de sa frustration face à l'approche ABC, qui représentait l'inverse.
Python prétend privilégier une syntaxe et une grammaire plus simples et plus claires, tout en laissant aux développeurs le choix de leur méthode de programmation. Python est dépourvu do .. whilede boucles , ce que Rossum considérait comme un inconvénient. Contrairement à la devise de Perl , « il y a plusieurs façons de faire », Python prône une approche selon laquelle « il devrait y avoir une seule façon évidente de faire les choses, et de préférence une seule ». En pratique, cependant, Python offre de nombreuses manières d'atteindre un objectif donné. Il existe au moins trois façons de formater une chaîne de caractères littérale, sans qu'il soit possible de privilégier une méthode particulière. Alex Martelli , membre de la Python Software Foundation et auteur d'ouvrages sur Python, a écrit que « dans la culture Python, qualifier quelque chose d'"astucieux" n'est pas considéré comme un compliment » .
Les développeurs de Python privilégient généralement la lisibilité aux performances. Par exemple, ils refusent les correctifs apportés aux parties non critiques de l' implémentation de référence CPython qui offriraient des gains de vitesse ne justifiant pas la perte de clarté et de lisibilité. La vitesse d'exécution peut être améliorée en déplaçant les fonctions critiques vers des modules d'extension écrits dans des langages tels que le C , ou en utilisant un compilateur JIT (Just-In-Time) comme PyPy . Il est également possible de transpiler vers d'autres langages. Cependant, cette approche ne permet généralement pas d'atteindre le gain de vitesse escompté, car Python est un langage très dynamique , ou bien elle ne compile qu'un sous-ensemble restreint de Python (avec d'éventuelles modifications sémantiques mineures).
Python se veut un langage ludique à utiliser. Cet objectif se reflète dans son nom – un hommage au groupe humoristique britannique Monty Python – et dans l'approche ludique de certains tutoriels et documents de référence. Par exemple, certains exemples de code utilisent les termes « spam » et « eggs » (en référence à un sketch des Monty Python ), plutôt que les termes habituels « foo » et « bar » .
Un néologisme courant dans la communauté Python est « pythonic » , qui recouvre un large éventail de significations liées au style de programmation : un code pythonique peut bien utiliser les idiomes de Python ; être naturel ou témoigner d’une maîtrise du langage ; ou se conformer à la philosophie minimaliste de Python et à son accent sur la lisibilité.
Propositions d'amélioration
Les Propositions d'amélioration de Python (PEP) sont des documents de conception visant soit à fournir des informations à la communauté Python , soit à proposer de nouvelles fonctionnalités pour Python. Les PEP ont pour but d'expliquer de nouveaux processus en Python, de fournir des conventions de nommage ou de documenter les processus du langage. Les PEP sont supervisées par le Conseil de pilotage de Python.
Il existe trois types de PEP : les PEP de normalisation , les PEP informationnels et les PEP de processus , chacun ayant sa propre signification. Ils ont été introduits pour la première fois en 2000, inspirés par d’autres RFC (demandes de commentaires) et propositions d’amélioration de la conception. Parmi les PEP les plus connus figurent les PEP - 1, PEP - 8, PEP - 20 et PEP - 257. d'accolades pour délimiter les blocs, et les points-virgules après les instructions sont autorisés mais rarement utilisés. Il comporte moins d'exceptions syntaxiques et de cas particuliers que C ou Pascal .
Échancrure
Instructions et flux de contrôle
Les instructions de Python comprennent les suivantes :
- L' instruction d'affectation , utilisant un seul signe égal
= - L'
ifinstruction, qui exécute conditionnellement un bloc de code, ainsi queelseetelif(une contraction deelse if) - Cette
forinstruction parcourt un objet itérable et stocke chaque élément dans une variable pour être utilisée par le bloc associé ; la variable n'est pas supprimée à la fin de la boucle. - L'
whileinstruction exécute un bloc de code tant que la condition booléenne est vraie. - Cette
tryinstruction permet aux exceptions levées dans le bloc de code auquel elle est rattachée d'être interceptées et gérées parexceptdes clauses (ou par la nouvelle syntaxeexcept*de Python 3.11 pour les groupes d'exceptions) ; elletrygarantit également que le code de nettoyage d'unfinallybloc est toujours exécuté, quelle que soit la manière dont le bloc se termine. - L'
raiseinstruction, utilisée pour lever une exception spécifique ou relancer une exception interceptée - Cette
classinstruction exécute un bloc de code et associe son espace de noms local à une classe , pour une utilisation en programmation orientée objet. - L'
definstruction, qui définit une fonction ou une méthode - Cette
withinstruction, qui encadre un bloc de code dans un gestionnaire de contexte, permet un comportement similaire à l'acquisition de ressources par initialisation (RAII) et remplace l'idiome try/finally courant Des exemples de contexte incluent l'acquisition d'un verrou avant l'exécution de code, puis sa libération ; ou l'ouverture puis la fermeture d'un fichier. - L'
breakinstruction qui sort d'une boucle - L'
continueinstruction, qui ignore le reste de l'itération en cours et passe à la suivante - L'
delinstruction, qui supprime une variable (en supprimant la référence du nom à la valeur) et produit une erreur si la variable est référencée avant d'être redéfinie - L'
passinstruction, qui sert de NOP (c'est-à-dire aucune opération), est syntaxiquement nécessaire pour créer un bloc de code vide. - Cette
assertinstruction, utilisée en débogage pour vérifier les conditions qui devraient s'appliquer, - L'
yieldinstruction, qui renvoie une valeur à partir d'une fonction génératrice (et également un opérateur) ; utilisée pour implémenter des coroutines - L'
returninstruction, utilisée pour renvoyer une valeur à partir d'une fonction - Les instructions
import`and` et `fromis` permettent d'importer des modules dont les fonctions ou les variables peuvent être utilisées dans le programme courant. Python 3.15 ajoute une nouvelle fonctionnalité d'importation paresseuse grâce à un nouveau mot-clé : « Celazymot-clé fonctionne avec les instructions `and`importetfrom ... import`is`. » - Les instructions
match« and »case, analogues à une instruction « switch » , comparent une expression à un ou plusieurs cas en tant que mesure de contrôle de flux.
L'instruction d'affectation associe= un nom à un objet distinct, alloué dynamiquement . Les variables peuvent ensuite être réaffectées à tout moment à n'importe quel objet. En Python, un nom de variable est un conteneur de référence générique sans type de données fixe ; cependant, il fait toujours référence à un objet possédant un type. C'est ce qu'on appelle le typage dynamique , par opposition aux langages statiquement typés , où chaque variable ne peut contenir qu'une valeur d'un certain type.
Python ne prend pas en charge l'optimisation des appels terminaux ni les continuations de première classe ; selon Van Rossum, le langage ne le fera jamais. Cependant, une meilleure prise en charge des fonctionnalités de type coroutine est assurée par l'extension des générateurs de Python. Avant la version 2.5, les générateurs étaient des itérateurs paresseux ; les données étaient transmises de manière unidirectionnelle hors du générateur. À partir de Python 2.5, il est possible de renvoyer des données à une fonction génératrice ; et à partir de la version 3.3, les données peuvent être transmises à travers plusieurs niveaux de pile.
Expressions
Les expressions de Python comprennent les suivantes :
- Les opérateurs d'addition, de soustraction et de multiplication sont similaires à ceux d'autres langages, mais le comportement de la division diffère. En Python, il existe deux types de division :
+la division entière (ou division par partie entière) et la division-par nombre à virgule flottante . Python utilise l' opérateur `exponentiation`.*///** - Python utilise l'
+opérateur `concat` pour la concaténation de chaînes. Le langage utilise l'*opérateur `duplicate` pour dupliquer une chaîne un nombre de fois spécifié. - L'
@opérateur infixe est destiné à être utilisé par des bibliothèques telles que NumPy pour la multiplication matricielle . - La syntaxe
:=, appelée la «L'opérateur morse ", a été introduit dans Python 3.8. Cet opérateur assigne des valeurs à des variables dans le cadre d'une expression plus large. - En Python,
==`concord` compare deux objets par valeur.isL'opérateur `concord` de Python peut être utilisé pour comparer les identités des objets (c'est-à-dire une comparaison par référence), et les comparaisons peuvent être chaînées, par exemple : `concord` .compréhension de liste , et une expression plus générale appelée expression génératrice . - Les fonctions anonymes sont implémentées à l'aide d'expressions lambda ; cependant, il ne peut y avoir qu'une seule expression dans chaque corps.
- Les expressions conditionnelles s'écrivent sous la forme . (L'ordre des opérandes est différent de celui de l' opérateur commun à de nombreux autres langages.)
les listes et les tuples . Les listes s'écrivent `list` , sont mutables et ne peuvent pas servir de clés de dictionnaires (car les clés de dictionnaire doivent être immuables en Python). Les tuples, écrits `tuple` , sont immuables et peuvent donc servir de clés de dictionnaires, à condition que tous leurs éléments soient immuables. L' opérateur `concat` permet de concaténer deux tuples sans modifier directement leur contenu, mais en créant un nouveau tuple contenant leurs éléments. Par exemple, si la variable `list` est initialement égale à `a` , l'exécution de `concat` évalue d'abord `a` , ce qui donne ` a` ; ce résultat est ensuite assigné à `a`, « modifiant ainsi le contenu » de `a` tout en respectant l'immuabilité des tuples. Les parenthèses sont facultatives pour les tuples dans un contexte non ambigu.printfchaînes de formatage du langage C — par exemple, il s’évalue à . Dans Python 2.6 et versions ultérieures, cet opérateur a été complété par la méthode de la classe, par exemple, . Python 3.6 a ajouté les « f-strings » : .%s eggs=%d"%("blah",2)"spam=blah eggs=2"format()str{0} eggs={1}".format("blah",2);eggs=2;f'spam={spam} eggs={eggs}' - En Python, les chaînes de caractères peuvent être concaténées en les « additionnant » (avec le même opérateur que pour l'addition d'entiers et de nombres à virgule flottante) ; par exemple, ` concat( int, float )` renvoie ` int, float( ...
+"eggs""spameggs"+"2""22" - Python prend en charge les chaînes littérales de plusieurs manières :
- Délimitées par des guillemets simples ou doubles ; les guillemets simples et doubles ont une fonctionnalité équivalente (contrairement aux shells Unix , à Perl et aux langages influencés par Perl). Les deux marques utilisent la barre oblique inverse (
\\) comme caractère d’échappement . L’interpolation de chaînes est devenue disponible dans Python 3.6 sous le nom de « littéraux de chaînes formatées ». - Triplement guillemet, c'est-à-dire commençant et se terminant par trois guillemets simples ou doubles ; cela peut s'étendre sur plusieurs lignes et fonctionner comme les documents here dans les shells, Perl et Ruby .
- Les chaînes de caractères brutes sont indiquées en préfixant la chaîne littérale par un point (
r.). Les séquences d'échappement ne sont pas interprétées ; les chaînes brutes sont donc utiles lorsque les barres obliques inverses sont fréquentes, comme dans les expressions régulières et les chemins de type Windows . (Voir «@-quoting » en C# .)
- Délimitées par des guillemets simples ou doubles ; les guillemets simples et doubles ont une fonctionnalité équivalente (contrairement aux shells Unix , à Perl et aux langages influencés par Perl). Les deux marques utilisent la barre oblique inverse (
- Python propose des index et des expressions de découpage de tableaux dans les listes, notés
a[key]` list.slice` ou ` list.slice`. Les index commencent à zéro et les index négatifs sont relatifs à la fin. Un découpage extrait les éléments de l' index de début jusqu'à l' index de fin , exclu . Le troisième paramètre (optionnel) ` step` permet d'ignorer ou d'inverser des éléments. Les index de découpage peuvent être omis ; par exemple, `list.slice` renvoie une copie de la liste entière. Chaque élément d'un découpage est une copie superficielle de la liste .
En Python, la distinction entre expressions et instructions est strictement appliquée, contrairement à des langages tels que Common Lisp , Scheme ou Ruby . Cette distinction conduit parfois à la duplication de certaines fonctionnalités, par exemple :
- Compréhensions de listes vs.
forboucles - Expressions conditionnelles vs.
ifblocs - Les fonctions intégrées
eval()`void` et `void` (en Python 2, ` void` est une instruction) ; la première fonction est destinée aux expressions, tandis que la seconde est destinée aux instructions.exec()exec
Une instruction ne peut pas faire partie d'une expression ; de ce fait, les expressions telles que les listes et Python utilise le typage dynamique (ou « duck typing ») : ses objets sont typés, mais ses variables ne le sont pas. Les contraintes de type ne sont pas vérifiées lors de la définition d'un objet ; en revanche, les opérations sur un objet peuvent échouer lors de son utilisation, indiquant que l'objet n'est pas du type approprié. Bien que dynamiquement typé , Python est fortement typé , interdisant les opérations mal définies (comme l'addition d'un nombre et d'une chaîne de caractères) au lieu de tenter de les interpréter silencieusement. Python permet aux programmeurs de définir leurs propres types à l'aide de classes , principalement pour la programmation orientée objet . De nouvelles instances de classes sont créées en appelant la classe, par exemple `class` ou `class`. Ces classes sont des instances de la métaclasse (qui est elle-même une instance de la métaclasse), permettant ainsi la métaprogrammation et la réflexion . Avant la version 3.0, Python avait deux types de classes, utilisant toutes deux la même syntaxe : l'ancienne et la nouvelle . Les versions actuelles de Python ne prennent en charge que la sémantique de la nouvelle. Python prend en charge les annotations de type optionnelles . Ces annotations ne sont pas imposées par le langage, mais peuvent être utilisées par des outils externes tels que mypy pour détecter les erreurs. Python inclut un module La plupart des implémentations Python prennent en charge le type double, mais certaines implémentations spécifiques, comme MicroPython pour la programmation embarquée , utilisent par défaut le format IEEE float 32 bits. Il est possible d'opter pour le format 64 bits en définissant la variable d'environnement MICROPY_FLOAT_IMPL sur MICROPY_FLOAT_IMPL_DOUBLE. La division entre entiers produit des résultats à virgule flottante. Le comportement de la division a considérablement changé au fil du temps : Python fournit une Python permet aux expressions booléennes contenant plusieurs relations d'égalité d'être cohérentes avec l'usage général en mathématiques. Par exemple, l'expression Python utilise l'arithmétique à précision arbitraire pour toutes les opérations sur les entiers. Le Grâce à sa vaste bibliothèque mathématique et à la bibliothèque tierce NumPy , Python est fréquemment utilisé pour la programmation scientifique dans des tâches telles que le traitement et la manipulation de données numériques. En Python, les fonctions sont créées à l'aide du Pour attribuer une valeur par défaut à un paramètre de fonction au cas où aucune valeur réelle ne serait fournie lors de l'exécution, la syntaxe de définition de variable peut être utilisée dans l'en-tête de la fonction. Programme « Bonjour, monde ! » : Certaines parties de la bibliothèque standard sont couvertes par des spécifications — par exemple, l'implémentation de l'interface WSGI ( Web Server Gateway Interface index des paquets Python (PyPI), le dépôt officiel des logiciels Python tiers, contient plus de 614 339 paquets. De plus, CPython est fourni avec un environnement de développement intégré (IDE) appelé IDLE , qui est orienté vers les débutants.IDLE et IPython , ajoutent des fonctionnalités supplémentaires telles qu’une autocomplétion améliorée, la conservation de l’état de session et la coloration syntaxique . Les environnements de développement intégrés (IDE) de bureau standard incluent PyCharm , Spyder et Visual Studio Code ; il existe des IDE basés sur un navigateur Web , tels que les environnements suivants : CPython est disponible pour de nombreuses plateformes, notamment Windows et la plupart des systèmes Unix modernes , y compris macOS (et les Mac Apple M1 , depuis Python 3.9.1, via un programme d'installation expérimental). À partir de Python 3.9, le programme d'installation de Python ne parvient pas à s'installer sur Windows 7 et 8 ; Windows XP était pris en charge jusqu'à Python 3.5. Les anciennes versions de Python prennent en charge officieusement VMS (principalement ) et OpenVMS x86-64 prend en charge Python 3.10. La portabilité entre plateformes a été l'une des premières priorités de Python. Lors du développement de Python 1 et 2, OS/2 et Solaris étaient même pris en charge ; depuis, la prise en charge a été abandonnée pour de nombreuses plateformes. Toutes les versions actuelles de Python (depuis la version 3.7) ne prennent en charge que les systèmes d'exploitation dotés du multithreading , et ne prennent désormais en charge qu'un nombre bien moindre de systèmes d'exploitation (en abandonnant de nombreux systèmes obsolètes) qu'auparavant. Toutes les implémentations alternatives présentent des sémantiques au moins légèrement différentes. Par exemple, une alternative peut inclure des dictionnaires non ordonnés , contrairement à d'autres versions actuelles de Python. Autre exemple au sein de l'écosystème Python : PyPy ne prend pas en charge l'intégralité de l'API C de Python. La création d'un exécutable en Python se fait souvent en intégrant l'interpréteur Python complet à l'exécutable, ce qui entraîne des tailles binaires considérables pour les petits programmes Il existe cependant des implémentations capables de compiler véritablement du code Python. Parmi ces implémentations alternatives, on peut citer : Stackless Python est une importante variante de CPython qui implémente des microthreads . Cette implémentation utilise la pile d'appels différemment, permettant ainsi des programmes massivement concurrents. PyPy propose également une version sans pile. Des compilateurs Python à la volée ont été développés, mais ne sont plus pris en charge : Il existe plusieurs compilateurs/ transpileurs pour les langages objets de haut niveau ; le langage source est Python sans restriction, un sous-ensemble de Python ou un langage similaire à Python : Il existe également des compilateurs spécialisés : Il existait quelques projets plus anciens, ainsi que des compilateurs non conçus pour être utilisés avec Python 3.x et sa syntaxe associée : Une comparaison des performances de différentes implémentations de Python, utilisant une charge de travail non numérique (combinatoire), a été présentée à EuroSciPy '13. De plus, les performances de Python par rapport à d'autres langages de programmation sont évaluées par The Computer Language Benchmarks Game . Il existe plusieurs approches pour optimiser les performances de Python, malgré la lenteur inhérente à un langage interprété . Ces approches comprennent les stratégies ou outils suivants : Le développement de Python s'effectue principalement via le processus des Propositions d'amélioration de Python (PEP) ; ce processus constitue le principal mécanisme de proposition de nouvelles fonctionnalités majeures, de recueil des avis de la communauté sur les problèmes rencontrés et de documentation des décisions de conception de Python. Le style de codage Python est traité dans la PEP 8. Les PEP les plus importantes sont examinées et commentées par la communauté Python et le comité de pilotage. L'amélioration du langage est liée au développement de l'implémentation de référence CPython. La liste de diffusion python-dev est le principal forum de développement du langage. Les problèmes spécifiques étaient initialement abordés dans le système de suivi des bogues Roundup , hébergé par la fondation. En 2022, tous les problèmes et discussions ont été transférés sur GitHub . Le développement s'effectuait initialement sur un dépôt de code source auto-hébergé sous Mercurial , jusqu'à la migration de Python vers GitHub en janvier 2017. Les versions publiques de CPython se déclinent en trois types, qui se distinguent par la partie du numéro de version qui est incrémentée : De nombreuses versions alpha, bêta et candidates sont également publiées en avant-première et à des fins de test avant leur publication finale. Bien qu'un calendrier de publication soit généralement établi, les publications sont souvent retardées si le code n'est pas encore prêt. L'équipe de développement de Python surveille l'état du code en exécutant une suite de tests unitaires exhaustive pendant le développement. La principale conférence académique sur Python est PyCon . Il existe également des programmes de mentorat spécialisés en Python, tels que PyLadies . Le nom Python s'inspire du groupe humoristique britannique Monty Python , que Guido van Rossum, le créateur de Python, appréciait beaucoup lors du développement du langage. Les références aux Monty Python sont fréquentes dans le code et la culture Python ; , les métasyntaxiques dans la documentation Python sont « spam » « » , plutôt que les traditionnelles foo » « » De documentation officielle de Python contient diverses références à des sketches des Monty Python. Python sont parfois appelés « Pythonistas » dictles compréhensions (ainsi que les expressions lambda) ne peuvent pas contenir d'instructions. Par exemple, une instruction d'affectation ne peut pas faire partie de l'expression conditionnelle d'une instruction conditionnelle.typetypingcontenant plusieurs noms de types pour les annotations de type. De plus, mypy prend en charge un compilateur Python appelé mypyc, qui exploite les annotations de type pour l'optimisation. Taper Mutabilité Description Exemples de syntaxe boolimmuable valeur booléenne octets)Nombre complexe avec parties réelle et imaginaireTableau associatif (ou dictionnaire) de paires clé-valeur ; peut contenir des types mixtes (clés et valeurs) ; les clés doivent être de type hachabled'ellipse servant d'index dans les tableaux NumPyNombre à virgule flottante double précision 64 bits ( nombre IEEE 754 avec 53 bits de précision, dans toutes les versions prises en charge depuis CPython 3.11 ; également en pratique dans les versions 3.10 et antérieures , bien que la précision y dépende techniquement de la machine ) . Le type intégré de Python prend cependant en charge à la fois les nombres à virgule flottante double précision 64 bits et les nombres à virgule flottante 32 bits, et le module de la bibliothèque standard de Python prend également en charge les nombres à virgule flottante demi-précision 16 bits. Les bibliothèques Python telles que NumPy et Pandas peuvent également prendre en charge les nombres à virgule flottante 32 bits ou plus ; toutefois, la prise en charge des nombres à virgule flottante demi-précision est souvent incomplète ou inexistante dans la plupart des bibliothèques. Le type bfloat 16 bits est pris en charge par quelques bibliothèques. memoryviewstructnumpy.halfEnsemble non ordonné , ne contient aucun doublon ; peut contenir des types mixtes, s’il est hachable.Entier de magnitude illimitée (c'est-à-dire n'utilisant pas d'entiers machine ; par exemple, le package Python NumPy utilise des entiers de taille fixe pour accélérer le calcul (et autorise différentes tailles), tels que les types numpy.byteet numpy.ulonglong, tous ces types ont une possibilité de dépassement de capacité, bien que moins probable à mesure qu'il est plus grand)Liste , peut contenir des types mixtesnull dans d'autres languesdes opérateurs surchargés pour indiquer des types d'opérandes non pris en charge.Ensemble non ordonné , ne contient aucun doublon ; peut contenir des types mixtes, s’il est hachable.chaîne de caractères : séquence de points de code Unicodetupleimmuable Tuple peut contenir des types mixtes opérateur modulo ( )% . (Avec l'opérateur modulo, le reste peut être négatif, par exemple, .) Python propose également le symbole d' exponentiation ( par exemple et ), ainsi que l'opérateur de multiplication matricielle ( ) . Ces opérateurs fonctionnent comme en mathématiques traditionnelles ; avec les mêmes règles de priorité , les opérateurs infixes et peuvent également être unaires , pour représenter respectivement les nombres positifs et négatifs.4% -3 == -2**5**3 == 1259**0.5 == 3.0@+-/opérateur pour toujours représenter la division en virgule flottante, par exemple, .L'arrondi vers moins l'infini, bien que différent de celui utilisé dans la plupart des langages, confère une plus grande cohérence à Python. Par exemple, cet arrondi garantit que l'équation est toujours vraie. De plus, il assure la validité de l'équation pour les valeurs positives et négatives de . Comme prévu, le résultat de se situe dans l' intervalle semi-ouvert [0, b ), où est un entier positif ; cependant, pour que l'équation reste valide, le résultat doit se situer dans l'intervalle ( b , 0] lorsque est négatif. bbroundfonction pour arrondir un nombre flottant à l'entier le plus proche. En cas d'égalité , Python 3 utilise la méthode d'arrondi au pair : `float(float) round(1.5)` et `float(float round(2.5))` donnent tous deux `float (float)` 2. Les versions de Python antérieures à 3 utilisaient la méthode d'arrondi à l'entier le plus éloigné de zéro : `float(float) round(0.5)` donne 1.0`float(float)` et `float(float) ` round(-0.5)donne `float(float)` −1.0. a < b < cteste si `a` aest inférieur à `b` bet ` bc` est inférieur à `a` c. Les langages dérivés du C interprètent cette expression différemment : en C, l'expression évaluerait d'abord `a` a < b, ce qui donnerait 0 ou 1, et ce résultat serait ensuite comparé à `b` c. Decimaltype/la classe du decimalmodule fournit des nombres décimaux à virgule flottante avec une précision arbitraire prédéfinie et plusieurs modes d'arrondi. La Fractionclasse du fractionsmodule fournit une précision arbitraire pour les nombres rationnels . Syntaxe des fonctions
defmot-clé `function`. La définition d'une fonction est similaire à son appel : on indique d'abord son nom, puis ses paramètres. Voici un exemple de fonction qui affiche ses entrées :Exemples de code
wsgiref ) suit la PEP 333 — mais la plupart des parties sont spécifiées par leur code, leur documentation interne et leurs suites de tests . Cependant, comme la majeure partie de la bibliothèque standard est écrite en Python multiplateforme, seuls quelques modules doivent être modifiés ou réécrits pour des implémentations alternatives.environnements de développement
Mises en œuvre
Limitations de l'implémentation de référence
Autres implémentations
Implémentations non prises en charge
Transpileurs vers d'autres langues
Performance
Setpour les tests d'appartenance, ou dequepour collectionsles opérations sur les files d'attente .Développement du langage
Appellation
Langages influencés par Python