Article de reference

Python (langage de programmation)

{{Cite web |title=General Python FAQ – Python 3 documentation |url=https://docs.python.org/3/faq/general.html#what-is-python |access-date=7 July 2024 |website=docs.python.org}} ...

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.

Guido van Rossum , le concepteur de Python , à PyCon US 2024

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

par espaces , plutôt que les accolades ou les mots-clés, pour délimiter les blocs . Une indentation accrue suit certaines instructions ; une indentation réduite signale la fin du bloc courant. Ainsi, la structure visuelle du programme représente fidèlement sa structure sémantique. Cette caractéristique est parfois appelée « règle du hors-jeu » . D'autres langages utilisent l'indentation de cette manière ; mais dans la plupart, l'indentation n'a pas de signification sémantique. La taille d'indentation recommandée est de quatre espaces.

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 que elseet elif(une contraction de else 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 par exceptdes clauses (ou par la nouvelle syntaxe except*de Python 3.11 pour les groupes d'exceptions) ; elle trygarantit également que le code de nettoyage d'un finallybloc 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é : « Ce lazymot-clé fonctionne avec les instructions `and` importet from ... 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# .)
  • 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 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.

La hiérarchie des types standard en Python 3

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

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

Résumé des types intégrés de Python 3
TaperMutabilitéDescriptionExemples de syntaxe
boolimmuablevaleur booléenneoctets)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.half

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.

Ensemble 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 Unicode
tupleimmuableTuple peut contenir des types mixtesopé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@+-

La division entre entiers produit des résultats à virgule flottante. Le comportement de la division a considérablement changé au fil du temps :

  • La version actuelle de Python (c'est-à-dire depuis la version 3.0) a modifié l' /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. bb

    Python fournit une roundfonction 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.

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

    Python utilise l'arithmétique à précision arbitraire pour toutes les opérations sur les entiers. Le 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 .

    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.

    Syntaxe des fonctions

    En Python, les fonctions sont créées à l'aide du 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 :

    ): imprimer ( entrée1 ) imprimer ( entrée2 )imprimante ( "bonjour" )# Exemple de sortie : # bonjour # déjà là

    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.

    Exemples de code

    Programme « Bonjour, monde ! » :

    factorielle d'un entier non négatif :

    MIME et HTTP sont pris en charge. Le langage comprend des modules pour la création d'interfaces graphiques , la connexion à des bases de données relationnelles , la génération de nombres pseudo-aléatoires , l'arithmétique avec des décimales de précision arbitraire , la manipulation d'expressions régulières et les tests unitaires .

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

    index des paquets Python (PyPI), le dépôt officiel des logiciels Python tiers, contient plus de 614 339 paquets.

    environnements de développement

    boucle de lecture-évaluation-affichage (REPL) ; cela permet à l'environnement de fonctionner comme un interpréteur de ligne de commande , avec lequel les utilisateurs entrent des instructions séquentiellement et reçoivent les résultats immédiatement.

    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 :

    Mises en œuvre

    CPython est l' implémentation de référence de Python. Cette implémentation est écrite en C et respecte la norme C11 depuis la version 3.11. Les versions antérieures utilisent la norme C89 avec certaines fonctionnalités C99 , mais les extensions tierces ne sont pas limitées aux anciennes versions de C ; elles peuvent par exemple être implémentées en C11 ou en C++. CPython compile les programmes Python en un bytecode intermédiaire , qui est ensuite exécuté par une machine virtuelle . CPython est distribué avec une vaste bibliothèque standard écrite en C et en Python natif.

    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.

    Limitations de l'implémentation de référence

    • La consommation d'énergie de Python avec CPython pour un code généralement écrit est bien pire que celle de C, d'un facteur 75,88.
    • Le débit de Python avec CPython pour un code généralement écrit est inférieur à celui de C d'un facteur de 71,9.
    • L'utilisation moyenne de la mémoire de CPython pour un code typiquement écrit est pire que celle de C d'un facteur 2,4.

    Autres implémentations

    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 :

    Implémentations non prises en charge

    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 :

    • Google a lancé un projet nommé Unladen Swallow en 2009 : ce projet visait à accélérer l'interpréteur Python par cinq en utilisant LLVM et à améliorer la capacité multithread pour une mise à l'échelle à des milliers de cœurs, alors que les implémentations typiques sont limitées par le verrou global de l'interpréteur .
    • Psyco est un compilateur JIT spécialisé , désormais abandonné, qui s'intégrait à CPython et transformait le bytecode en code machine à l'exécution. Le code généré était spécialisé pour certains types de données et était plus rapide que le code Python standard. Psyco n'est pas compatible avec Python 2.7 et les versions ultérieures.
    • PyS60 était un interpréteur Python 2 pour les téléphones mobiles Series 60 , commercialisé par Nokia en 2005. Cet interpréteur implémentait de nombreux modules de la bibliothèque standard de Python, ainsi que des modules supplémentaires pour l'intégration avec le système d'exploitation Symbian . Le Nokia N900 prend également en charge Python via la bibliothèque de widgets GTK , permettant ainsi d'écrire et d'exécuter des programmes sur le périphérique cible.

    Transpileurs vers d'autres langues

    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 :

    • Brython et Transcrypt compilent Python en JavaScript .
    • Cython compile un sur-ensemble de Python en C. Le code résultant peut être utilisé avec Python via des appels directs à l'API de niveau C dans l'interpréteur Python.
    • PyJL compile/transpile un sous-ensemble de Python en « code source Julia lisible, maintenable et performant » . Malgré les affirmations des développeurs concernant les performances, cela n'est pas possible pour n'importe quel code Python ; autrement dit, la compilation vers un langage plus rapide ou vers du code machine est généralement impossible. La sémantique de Python peut être modifiée, mais dans de nombreux cas, un gain de vitesse est possible avec peu ou pas de modifications du code Python. Le code source Julia ainsi optimisé peut ensuite être utilisé depuis Python ou compilé en code machine.
    • Nuitka compile du code Python en C. [ compilateur est compatible avec Python 3.4 à 3.13 (ainsi que 2.6 et 2.7) pour les principales plateformes prises en charge par Python (y compris Windows 7 et Windows XP) et Android. Ses développeurs annoncent une compatibilité totale avec Python 3.10, une compatibilité partielle avec Python 3.11 et 3.12, et une compatibilité expérimentale avec Python 3.13. Nuitka est compatible avec macOS, y compris les versions basées sur Apple Silicon. Le compilateur est gratuit, mais propose des modules complémentaires payants (par exemple, pour masquer le code source).
    • Numba est un compilateur JIT utilisé depuis Python ; il traduit un sous-ensemble de code Python et NumPy en code machine performant. Cet outil s'active en ajoutant un décorateur au code Python concerné.
    • Pythran compile un sous-ensemble de Python 3 en C++ ( C++11 ).
    • RPython peut être compilé en C et est utilisé pour construire l'interpréteur PyPy pour Python.
    • Le transpileur Python → 11l → C++ compile un sous-ensemble de Python 3 en C++ ( C++17 ).

    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 :

    • Grumpy de Google transpile Python 2 en Go . La dernière version date de 2017.
    • IronPython permet d'exécuter des programmes Python 2.7 avec le Common Language Runtime .NET . Une version alpha (publiée en 2021) est disponible pour « Python 3.4, bien que des fonctionnalités et des comportements de versions ultérieures puissent être inclus. »
    • Jython compile Python 2.7 en bytecode Java, permettant l'utilisation de bibliothèques Java à partir d'un programme Python.
    • Pyrex (dernière version sortie en 2010) et Shed Skin (dernière version sortie en 2013) sont compilés respectivement en C et C++.

    Performance

    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 :

    • Compilation à la volée : compilation dynamique de parties d’un programme Python pendant son exécution. Cette technique est utilisée dans des bibliothèques telles que Numba et PyPy .
    • Compilation statique : Il est parfois possible de compiler du code Python en code machine avant son exécution. Cython , qui compile du code Python en C, en est un exemple.
    • Concurrence et parallélisme : plusieurs tâches peuvent être exécutées simultanément. Python propose des modules comme `multiprocessing` pour prendre en charge cette forme de parallélisme. De plus, cette approche permet de s’affranchir des limitations du verrou global de l’interpréteur (GIL) lors de l’exécution de tâches sur le processeur.
    • Structures de données efficaces : Les performances peuvent également être améliorées en utilisant des types de données tels que Setpour les tests d'appartenance, ou dequepour collectionsles opérations sur les files d'attente .
    • Des gains de performance peuvent être observés en utilisant des bibliothèques telles que NumPy . La plupart des bibliothèques Python hautes performances utilisent du C ou du Fortran en interne au lieu de l'interpréteur Python.

    Développement du langage

    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 :

    • Versions incompatibles avec les versions précédentes , où le code est susceptible de ne plus fonctionner et doit être porté manuellement . La première partie du numéro de version est incrémentée. Ces versions sont peu fréquentes : la version 3.0 est sortie huit ans après la version 2.0. Selon Guido van Rossum, une version 4.0 ne verra probablement jamais le jour.
    • Les versions majeures, ou « versions de fonctionnalités », sont globalement compatibles avec la version précédente, mais introduisent de nouvelles fonctionnalités. La seconde partie du numéro de version est incrémentée. À partir de Python 3.9, ces versions devraient être publiées annuellement. Chaque version majeure bénéficie de correctifs pendant plusieurs années après sa publication.
    • Les correctifs de bogues , qui n'introduisent aucune nouvelle fonctionnalité, sont déployés environ tous les trois mois ; ces correctifs sont publiés lorsqu'un nombre suffisant de bogues ont été corrigés en amont depuis la dernière version. Les failles de sécurité sont également corrigées dans ces versions. La troisième et dernière partie du numéro de version 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 .

    Appellation

    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 »

    Langages influencés par Python

    • Cobra possède un document de remerciements qui cite Python en premier parmi les langages influents.
    • ECMAScript et JavaScript ont emprunté des itérateurs et des générateurs à Python.
    • Go est conçu pour « la rapidité de travail dans un langage dynamique comme Python ».
    • Julia a été conçue pour être « aussi utilisable pour la programmation générale que Python ».
    • Mojo est presque un sur-ensemble de Python.
    • GDScript est fortement influencé par Python.
    • Groovy , Boo , CoffeeScript , F# , Nim , Ruby , Swift , et V ont également été influencés.

    Plus d articles de Worldlex Wiki

    Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

    Explorer l index