Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Python (langage)

Un article de Wikipédia, l'encyclopédie libre.
Page d’aide sur l’homonymie

Pour les articles homonymes, voirPython.

Python
Logo.
Image illustrative de l’article Python (langage)

Date de première version,34 ans[1]
ParadigmesObjet,impératif etfonctionnel
AuteurGuido van Rossum
DéveloppeursPython Software Foundation
Dernière version3.14.3 ()[2]Voir et modifier les données sur Wikidata
Version en développement3.15.0 alpha 5 ()[3]Voir et modifier les données sur Wikidata
TypageFort,dynamique,duck typing
Influencé parABC,C,Eiffel,ICON,Modula-3,Java,Perl,Smalltalk,Tcl
A influencéRuby,Groovy,Boo,Julia,Mojo
ImplémentationsCPython,Jython,IronPython,PyPy
Écrit enC pour CPython,Java pour Jython,C# pour IronPython et en Python lui-même pour PyPy
Système d'exploitationMultiplateforme
LicenceLicence libre :
Python Software Foundation License
Site webhttps://python.org/
Extensions de fichiers.py, .pyc, .pyd, .pyo
modifier 

Python (prononcé/pi.tɔ̃/) est unlangage de programmationinterprété,multiparadigme etmultiplateformes. Il favorise laprogrammation impérativestructurée,fonctionnelle etorientée objet. Il est doté d'untypage dynamiquefort, d'une gestion automatique de lamémoire parramasse-miettes et d'unsystème de gestion d'exceptions ; il est ainsi similaire àPerl,Ruby,Scheme,Smalltalk etTcl.

Le langage Python est placé sous unelicence libre proche de lalicence BSD et fonctionne sur la plupart desplateformes informatiques, dessmartphones auxordinateurs centraux, deWindows àUnix avec notammentGNU/Linux en passant parmacOS, ou encoreAndroid,iOS, et peut aussi être traduit enJava ou.NET. Il est conçu pouroptimiser la productivité des programmeurs en offrant des outils dehaut niveau et unesyntaxe simple à utiliser.

Utilisation

[modifier |modifier le code]

Python est unlangage de programmation qui peut s'utiliser dans de nombreux contextes grâce à desbibliothèques spécialisées.

Il est utilisé commelangage de script pourautomatiser des tâches comme la récupération de la météo surInternet ou l'enchaînement d'actions enconception assistée par ordinateur (voir la sectionAdoption). On l'utilise également comme langage de développement de prototype lorsqu'on a besoin d'une application fonctionnelle avant de l'optimiser avec un langagecompilé. Il est particulièrement répandu dans le mondescientifique, et possède desbibliothèques optimisées pour lecalcul numérique[4].

C'est l'un des langages utilisés dans le domaine dubig data[5], de l'informatique quantique[6] et de l'intelligence artificielle incluant l'apprentissage automatique[4],[7].

Python à l'école

[modifier |modifier le code]

Python est apprécié par lespédagogues qui y trouvent unlangage où la syntaxe, clairement séparée des mécanismes debas niveau, permet uneinitiation aisée[8] aux concepts de base de la programmation[9].

Cette initiation commence généralement au début du lycée en classe de seconde. Les élèves souhaitant approfondir le sujet peuvent choisir un enseignement de spécialité Numérique et sciences informatiques[10] (NSI).

Les calculatrices supportant Python[10] destinées aux lycéens fonctionnent en Python 3. Ces calculatrices peuvent échanger des programmes avec desordinateurs personnels.

14 000 lycéens participent à la Nuit du code[11], un challenge à partir de la classe de première NSI pour créer un jeu en 6 heures avec le moteurPyxel de Python. À Berlin[12] etTokyo[13], les lycées français internationaux (LFI) participent à l'évènement.

AuLFI de Pékin[14], l'Heure de code est en langage graphiqueScratch de puzzles colorés aimantés pour les collégiens ou en langage textuel Python pour les lycéens.Drew Houston[15] (Dropbox),Mark Zuckerberg[15] (Meta),Bill Gates[15] (Microsoft) etBarack Obama[15] apportent leur soutient àCode.org (en), uneorganisation à but non lucratif à l'initiative deHour of code[16] etHour of AI.

En janvier-février, Passe ton hack[17] d'abord réunit 7 000 lycéens en ligne pourcapturer le drapeau (en) en programmant en Python[18] la détection d'uneinjection SQL, d'uneattaque par force brute avec dictionnaire d'un mot de passe ou le décryptage d'unchiffrement par décalage de César.

Python est utilisé comme langage de programmation dans l'enseignement secondaire et supérieur, notamment en France[19]. Depuis 2013, il y est enseigné à tous les étudiants declasses préparatoires scientifiques dans le cadre du tronc commun (informatique commune). Auparavant, l'enseignement d'informatique était limité à une option enMP, l'enseignement se faisant en langageCaml ouPascal[20]. Cette option existe toujours, mais Pascal a été abandonné à partir de la session 2015 des concours et Caml a, lui, été enlevé au profit deOCaml dans cet enseignement. Les premières épreuves de concours portant sur le langage Python sont également celles de la session 2015[21],[22].

Historique

[modifier |modifier le code]

Au CWI

[modifier |modifier le code]
Guido van Rossum, créateur de Python, à laOSCON 2006.

En 1982[23], auCentre pour les mathématiques et l'informatique (CWI) d'Amsterdam, auxPays-Bas, l'informaticienGuido van Rossum participe au développement du langage de programmationABC conçu pour l'enseignement[24] :
PUT "ABC" IN B cible les débutants (Beginners) absolus[23].

Il travaille alors dans l'équipe dusystème d'exploitationAmoeba dont lesappels systèmes sont difficilement interfaçables avec leBourne shell utilisé commeinterface utilisateur. Il estime alors qu'un langage de script inspiré d'ABC[20] pourrait être intéressant commeinterpréteur de commandes pour Amoeba[25].

En1989, profitant d'une semaine de vacances durant les fêtes deNoël, il utilise sonordinateur personnel[26] pour écrire la première version du langage. Fan de lasérie téléviséeMonty Python's Flying Circus, il décide de baptiser ce projet Python[27]. Il s'est principalement inspiré d'ABC, par exemple pour l'indentation comme syntaxe ou les types de haut niveau mais aussi deModula-3 pour lagestion des exceptions, dulangage C et desoutils UNIX[28].

Durant l'année suivante, le langage commence à être adopté par l'équipe du projet Amoeba, Guido poursuivant son développement principalement pendant son temps libre. Entre le[29] et le[1], la première version publique, numérotée 0.9.0[30], immédiatementpatchée en 0.9.1[31],[29], est postée sur le forumUsenet[25] alt.sources.

La dernière version sortie au CWI est Python 1.2.

Au CNRI

[modifier |modifier le code]

En1995, van Rossum continue son travail sur Python à laSociété pour les initiatives nationales de recherche (en)[32] àReston, enVirginie, où il sort plusieurs versions du logiciel.

Au CNRI, l'équipe Python travaille sur lenavigateur web expérimentalGrail[32] utilisant Tcl/Tk. Il est l'équivalent pour Python du navigateurHotJava, permettant d'exécuter desapplets dans un environnement sécurisé[33]. Il entraîne le développement demodules pour la bibliothèque standard de gestion deHTML.

En1999, le projetComputer Programming for Everybody[34] (CP4E) est lancé conjointement entre le CNRI et laDARPA. Il s'agit d'utiliser Python comme un langage d'enseignement de laprogrammation. Cette initiative conduira à la création de l'environnement de développement dénomméIDLE.

En, Andrew M. Kuchling, le manager pendant une décennie des versions de Python 2.0[35] à 2.7[36], publie une critique dénommée "Les bizarreries de Python" (Python Warts[37]), qui synthétise les griefs les plus fréquents exprimés à l'encontre du langage. Ce document aura une influence certaine sur les développements futurs du langage[38].

Du fait du manque de financement du projet par la DARPA, et du départ de nombreux développeurs Python du CNRI (dont Guido van Rossum), le projet IDLE s'éteint en 2000[34]. Python 1.6 est la dernière version sortie au CNRI.

Zope

[modifier |modifier le code]

En2000, l'équipe principale de développement de Python déménage à BeOpen pour former l'équipe PythonLabs à l’origine de Python 2.0. Après cette version, Guido van Rossum et les autres développeurs de PythonLabs rejoignent Digital Creations à présent connue sous le nom deZope Corporation[39].

LaPython Software Foundation

[modifier |modifier le code]

En 2001, Python 2.1 est une version dérivée de Python 1.6.1 et de Python 2.0. Sa licence est renomméePython Software Foundation License. Toutcode, documentation et spécification ajouté, depuis la sortie de Python 2.1 alpha, est détenu par laPython Software Foundation (PSF), uneassociation sans but lucratif fondée en 2001, modelée d'après l'Apache Software Foundation.

Google

[modifier |modifier le code]

En 2005, Guido van Rossum travaille sur les projets Mondrian et Rietveld[40].

En 2008, Python 3.0[41] est publié. L'équipe Python a choisi de casser la compatibilité ascendante dans cette nouvelle version majeure pour :

  • Réparer certains défauts du langage : par exemple l'orienté objet avec deux types declasses) ;
  • Nettoyer la bibliothèque standard de ses éléments obsolètes et redondants.

En 2012, Python 3.1[42] corrige les erreurs de jeunesse de la version 3.0.

Dropbox

[modifier |modifier le code]

En 2013, Guido van Rossum est embauché par Dropbox[43] (mypy[44]) jusqu'en 2019[45].

Microsoft

[modifier |modifier le code]

En 2020, Guido van Rossum entre dans la division développeur chez Microsoft[7].

Selon l'Index TIOBE,« Python, qui est devenu un élément incontournable de lascience des données, duDevOps et dudéveloppement web, est aussi désormais le langage le plus populaire dans le classement de TIOBE. Classé troisième langage le plus populaire de l'index au début de l'année 2021, Python s'est hissé à la première place en octobre 2022 »[46], notamment en raison de son efficacité pour l'apprentissage automatique.

En août 2025, Python occupe la première place de ce classement[47].

Caractéristiques

[modifier |modifier le code]

Syntaxe

[modifier |modifier le code]

Python a été conçu pour être un langage lisible. Il vise à être visuellement épuré. Par exemple, il possède moins de constructionssyntaxiques que des langages structurés tels queC,Perl, ouPascal. Les commentaires sont indiqués par le caractèrecroisillon#[48].

Lesblocs sont identifiés par l'indentation[49], au lieu d'accolades comme enC ouC++ ; ou debegin ... end comme enPascal ouRuby. Une augmentation de l'indentation marque le début d'un bloc, et une réduction de l'indentation marque la fin du bloc courant. Par convention, l'indentation est de quatre espaces en Python selon le standard de codage PEP 8[50].

Fonctionfactorielle en CFonctionfactorielle en Python
intfactorielle(intn){if(n<2){return1;}else{returnn*factorielle(n-1);}}
deffactorielle(n):ifn<2:return1else:returnn*factorielle(n-1)

Remarque : L'indentation pourrait être modifiée ou supprimée dans la version en C sans modifier son comportement. De même, la fonction Python peut être écrite avec une expression conditionnelle[51]. Cependant, une indentation correcte permet de détecter plus aisément des erreurs en cas d'imbrication de plusieurs blocs et facilite donc l'élimination de ces erreurs. C'est pourquoi il est préférable d'indenter convenablement les programmes en C. La version courte s'écrirait ainsi :

Fonction factorielle en CFonction factorielle en Python
intfactorielle(intn){// appel récursifreturnn<2?1:n*factorielle(n-1);}
deffactorielle(n):# appel récursifreturn1ifn<2elsen*factorielle(n-1)print([factorielle(nbr)fornbrinrange(6)])# [1, 1, 2, 6, 24, 120]

Mots-clés du langage

[modifier |modifier le code]

Les mots-clés réservés du langage Python sont fournis dans la listekeyword.kwlist du modulekeyword[52].

Les mots-clés de Python 2.7.5 sont les suivants :and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,pass,print,raise,return,try,while,with,yield.

À partir de Python 3.0,print etexec ne sont plus des mots-clés du langage, mais des fonctions du modulebuiltins[53]. Sont ajoutés aux mots-clés :True,False,None etnonlocal. Les trois premiers étaient déjà présents dans les versions précédentes, mais ils ne sont plus modifiables (auparavant, l'affectationTrue = 1 était possible)[54].nonlocal a été introduit par le PEP 3104[55], et permet, dans une fonction définie à l'intérieur d'une autre fonction, de modifier une variable d'un niveau supérieur deportée. Avant cela, seules les variables locales à la fonction, et globales (niveau module) étaient modifiables. Toutefois, il était possible, et ça l'est toujours sans le mot-clénonlocal, de modifier un objet affecté à une variable d'un niveau de portée supérieur, par exemple une liste avec la méthodeappend - c'est évidemment impossible pour unobjet immuable.

À partir de Python 3.10, il y a 3 mots-clés contextuels (« soft keywords » en anglais) :match,case,_ identique àl’instruction switch-case.

matchvaleur:casecondition_1:expression_1casecondition_2:expression_2case_:# `case _´ est accédé si toutes les autres conditions sont fausses.expression_par_défaut

Types de base

[modifier |modifier le code]

Les types de base en Python sont relativement complets et puissants. Il y a, entre autres :

Les objetsnumériques :

  • int est le type desentiers relatifs. Avant la version 3.0, ce type était dénommélong, et le typeint correspondait à un entier de 32 ou 64 bits. Néanmoins, uneconversion automatique en typelong évitait toutdébordement. Maintenant, ce type correspond aux entiers relatifs avec une précision illimitée sans restriction de taille.
  • long est le type des entiers relatifs, illimités de plus de 32 bits en Python 2, remplacé par le typeint en Python 3.
  • float est le typeflottant équivalent au typedoubledu C, soit tout nombre entre −1,7 × 10308 et 1,7 × 10308 sur les plateformes conforme à l'IEEE 754.
  • complex est le type des approximations desnombres complexes (c'est-à-dire deuxfloat).

Les objetsitérables sont parcourus à l'aide d'une bouclefor de la manière suivante :

forelementinobjet_iterable:traiter(element)
  1. bytearray est une chaîne d'octets modifiables. La version d'Unicode employée par Python peut être déterminée à l'aide de la variableunidata_version du moduleunicodedata.
  2. dict est un dictionnaire outableau associatif pour associer chaque clef unique à un objet. Ses méthodes sont.keys(),.values() ou.items().
  3. enumerate() énumère un objet itérable tel qu'une liste. Par rapport à la bouclefor, il renvoie à la fois l'index[56] et la valeur. L'objet énuméré n'est pas modifiable : il est ditimmuable.
  4. file correspond à un fichier obtenu grâce à la méthodewith open('c:\tool\python\pep-343.html', 'r') as file:
  5. frozenset forme une variante immuable d'unset.
  6. list est untableau dynamique qui étend automatiquement sa taille lorsque nécessaire et accepte des types de données hétérogènes.
  7. range(nbr) est un compteur. Il génère une séquence de nombres de 0 à nbr - 1.
  8. set est un ensemble non ordonné d'objets.
  9. str est une chaîne de caractères itérable caractère par caractère. À partir de la version 3.0, les caractères sont en Unicode sur 16 ou 32 bits ; les chaînes d'octets sont des objetsbytes[57],[58]. Dans les versions précédentes, ces objets étaient respectivement de typeUnicode etstr. Les objetsstr etbytes sont immuables.
  10. tuple (n-uplet) est une liste immuable d'objets de types pouvant être différents c'est-à-dire hétérogènes.
  11. typename est obtenu avec la fonctionnamedtuple(). C'est une variante destuple permettant d'accéder à un élément du tuple avec un nom se comportant comme une variable. Contrairement auxdict, ces objets sont immuables[59],[60].

Les autres objets ne sont ni numériques ni itérables :

  • bool est un booléen, soit le type deTrue etFalse renvoyés par exemple lors de comparaisons hors de l'utilisation de méthodesis_x().
  • exception est le type d'unmessage d'erreur lancé lorsque le code lève une exception.
  • function est le type d'une fonction, utilisé lors de l'appel des mots-clefdef etlambda.
  • module est le type d'un module, utilisé lors de l'appel des mots-clefimport etfrom.
  • None sert à dénoter qu'une variable est vide.
  • NotImplementedType indique une absence d'implémentation du type auquel on essaie d'accéder.
  • object est le type basique dont tous les autres types « héritent ».
  • slice est une partie de type ou un objet extensible.
  • type est le type du type des objets, obtenu grâce à la méthodetype().

Il est possible de dériver les classes des types de base pour créer ses propres types.On peut également fabriquer ses propres types d'objets itérables sans hériter des itérables de base en utilisant le protocole d'itération du langage.

Programmation fonctionnelle

[modifier |modifier le code]

Python permet de programmer dans un stylefonctionnel. Il dispose également descompréhensions de listes, et plus généralement les compréhensions peuvent produire des générateurs, desdictionnaires ou desensembles[61],[62]. Par exemple, pour construire la liste des carrés desentiers naturels plus petits que 10, on peut utiliser l'expression :

liste=[x**2forxinrange(10)]# liste = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

La liste des nombrespairs :

liste=[entierforentierinrange(10)ifentier%2==0]# liste = [0, 2, 4, 6, 8]

Une table de passage des lettres de l'alphabet vers leur codeASCII :

{chr(n):nforninrange(65,91)}# {'A': 65, 'B': 66, 'C': 67, ..., 'X': 88, 'Y': 89, 'Z': 90}

L'ensemble des lettres d'un mot (produit l'ensemble{'r', 'c', 'd', 'b', 'a'}) :

s="abracadabra"{cforcins}

Une compréhension peut comprendre plusieurs boucles et filtres, et il existe une correspondance avec le code réalisant le même calcul à l'aide d'instructionsfor etif :

CompréhensionCode équivalent
n=6[i+jifi!=jelse0foriinrange(n)# sans ":"ifi%2!=0# impaire ?forjinrange(n)ifj%3!=0]# [0, 3, 5, 6, 4, 5, 7, 8, 6, 7, 9, 0]
n=6;lstRes=[]# La liste résultat est videforiinrange(n):# avec ":"ifi%2!=0:# impaire ?forjinrange(n):ifj%3!=0:lstRes.append(i+jifi!=jelse0)# lstRes = [0, 3, 5, 6, 4, 5, 7, 8, 6, 7, 9, 0]

Cependant, une différence notable dans la version sans compréhension est que les variables i et j existent, avec la valeur qu'elles avaient lors de leur dernier tour de boucle. Ce n'est pas le cas pour des constructions par compréhension.

Une forme limitée defonction anonyme est possible :

lambdax:x+2

Les fonctions lambda peuvent être définies en ligne et utilisées comme arguments dans des expressions fonctionnelles :

list(filter(lambdax:x%2==0,range(10)))# renvoie [0, 2, 4, 6, 8]

retournera une liste constituée des nombres pairs inférieurs à 10.

Le même résultat peut être obtenu avec :

[xforxinrange(10)ifx%2==0]# renvoie [0, 2, 4, 6, 8]

Les lambdas de Python n'admettent que des expressions et ne peuvent être utilisées comme fonctions anonymes généralisées ; mais en Python, toutes les fonctions sont des objets, elles peuvent donc être passées en arguments à d'autres fonctions, et appelées lorsque c'est nécessaire. En effet, une fonction définie avecdef peut être créée à l'intérieur d'une autre fonction et on obtient ainsi une définition de fonction dans unevariable locale, par exemple :

deffiltre_inferieur_a_5(une_liste):defmon_filtre(x):# variable locale mon_filtrereturnx<5returnfilter(mon_filtre,une_liste)

Une fonction locale peut modifier l'environnement de la fonction qui l'a créée, grâce au mot-clénonlocal (voirFermeture (informatique)) :

fromtypingimportCallable# type le retour de fonctiondefaccum(pas)->Callable[[int],int]:# retourne une fonction appelabletotal=0# initialise une fois l'accumulateurdefajoute(germe)->int:nonlocaltotal# accède à l'accumulateur de la fonction accumtotal+=germe*pas# incrémente l'accumulateur du germe fois le pasreturntotal# retourne la valeur accumuléereturnajoute# retourne la fonction accumulateur paramétrée par le paspaire=accum(2)# retourne la fonction ajoute avec un pas de 2assertisinstance(paire,Callable)# paire est une fonction appelableprint([cell.cell_contentsforcellinpaire.__closure__])# environnement initial : [2, 0]print([paire(1)for_inrange(5)])# affiche la liste des cinq premiers nombres pairs# [2, 4, 6, 8, 10]print([paire(1)for_inrange(3)])# affiche la suite à partir du dernier compteur précédent# [12, 14, 16]print([cell.cell_contentsforcellinpaire.__closure__])# environnement final : [2, 16]

On peut ainsi créer plusieurs accumulateurs, faisant chacun référence à son propre total. Il est possible d'accéder à l'environnement d'une fonction locale à l'aide de l'attribut__closure__.

Programmation objet

[modifier |modifier le code]

Tous les types de base, les fonctions, lesinstances de classes (les objets « classiques » des langagesC++ etJava) et les classes elles-mêmes (qui sont des instances de méta-classes) sont des objets.

Une classe se définit avec le mot-cléclass. Lesclasses Python supportent l'héritage multiple ; il n'y a pas de surcharge statique comme en C++, ou de restrictions sur l'héritage comme c'est le cas en Java (une classe implémente plusieurs interfaces et hérite d'une seule classe) mais le mécanisme des arguments optionnels et par mot-clé est plus général et plus flexible. En Python, l'attribut d'un objet peut référencer une variable d'instance ou de classe (le plus souvent une méthode). Il est possible de lire ou de modifier un attribut dynamiquement avec les fonctions :

  • getattr(objet, "nom_attribut")
  • setattr(objet, "nom_attribut", nouvel_attribut)

Exemple de deux classes simples :

classPersonne:def__init__(self,nom,prenom):self.nom=nomself.prenom=prenomdefpresenter(self):returnself.nom+" "+self.prenomclassEtudiant(Personne):def__init__(self,niveau,nom,prenom):Personne.__init__(self,nom,prenom)self.niveau=niveaudefpresenter(self):returnself.niveau+" "+Personne.presenter(self)e=Etudiant("Licence INFO","Dupontel","Albert")asserte.nom=="Dupontel"

Méthodes spéciales et définition des opérateurs

[modifier |modifier le code]

Python fournit un mécanisme élégant etorienté objet pour définir un ensemble prédéfini d'opérateurs : tout objet Python peut se voir doté de méthodes dites spéciales.

Ces méthodes, commençant et finissant par deux tirets de soulignement(underscores), sont appelées lors de l'utilisation d'un opérateur sur l'objet :+ (méthode__add__),+= (méthode__iadd__),[] (méthode__getitem__),() (méthode__call__), etc. Des méthodes comme__repr__ et__str__ permettent de définir la représentation d'un objet dans l'interpréteur interactif et son rendu avec la fonctionprint.

Les possibilités sont nombreuses et sont décrites dans la documentation du langage[63].

Par exemple on peut définir l'addition de deux vecteurs à deux dimensions avec la classe suivante :

classVector2D:def__init__(self,x,y):# On utilise un tuple pour stocker les coordonnéesself.coords=(x,y)def__add__(self,other):# L'instruction a+b sera résolue comme a.__add__(b)# On construit un objet Vector2D à partir des coordonnées propres à l'objet, et à l'autre opérandereturnVector2D(self.coords[0]+other.coords[0],self.coords[1]+other.coords[1])def__repr__(self):# L'affichage de l'objet dans l'interpréteurreturn"Vector2D(%s,%s)"%self.coordsa=Vector2D(1,2)b=Vector2D(3,4)print(a+b)# Vector2D(4, 6)

Générateurs

[modifier |modifier le code]

Le mot-clefyield utilisé dans une fonction permet de faire de cette fonction un générateur. L'appel de cette fonction renvoie un objet de typegenerator, qui peut être utilisé dans une bouclefor, par exemple.

À chaque appel, le générateur effectue son traitement jusqu'à rencontrer le mot-cléyield, renvoie la valeur de l'expressionyield, et à l'appel suivant, reprend son déroulement juste après leyield. Par exemple pour calculer lasuite de Fibonacci, on peut écrire :

defgen_fibonacci():"""Générateur de la suite de Fibonacci"""a,b=0,1whileTrue:yielda# Renvoie la valeur de "a", résultat de l'itération en coursa,b=b,a+bfi=gen_fibonacci()print([next(fi)for_inrange(7)])# renvoie [0, 1, 1, 2, 3, 5, 8]print([next(fi)for_inrange(3)])# renvoie [13, 21, 34]

Le moduleitertools permet de manipuler les générateurs. Par exemple, pour extraire les 10 premiers éléments du générateur précédent :

importitertoolslist(itertools.islice(gen_fibonacci(),10))# renvoie [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Depuis Python 3.3, il est possible de produire un générateur à partir d'une fonction récursive, grâce à la syntaxeyield from, apparue dans le PEP 380[64] et qui « délègue » le calcul à un sous-générateur. L'exemple suivant calcule les permutations des dames correspondant aux solutions duproblème des huit dames étendu à un échiquier de taille n × n.

Problème des huit dames
defQueenSolver(nbrFile,lstColumn=[]):'''Résoudre nbrFile Dames sans prise sur un échiquier de nbrFile colonnes'''if(nbrRank:=len(lstColumn))==nbrFile:yieldlstColumn# Solution itérable trouvéeelse:forindFilein[colforcolinrange(1,nbrFile+1)ifcolnotinlstColumn]:isQueenUnderAttack=False;indRank=nbrRankforcolinlstColumn:ifcolin[indFile+indRank,indFile-indRank]:# Collision ?isQueenUnderAttack=True;break# colonne col à rejeterindRank-=1# Rangée précédenteifnot(isQueenUnderAttack):# Dame non attaquée ?# appel récursif en insérant dans la liste la Dame en indFileyield fromQueenSolver(nbrFile,lstColumn+[indFile])sum(1for_inQueenSolver(8))# Nombre de solutions# renvoie 92
abcdefgh
8
Dame blanche sur case noire h8
Dame noire sur case blanche d7
Dame blanche sur case blanche a6
Dame noire sur case noire c5
Dame blanche sur case noire f4
Dame noire sur case blanche b3
Dame blanche sur case blanche g2
Dame noire sur case noire e1
8
77
66
55
44
33
22
11
abcdefgh
Solution 92 : diversité[65],[66] inclusive[67]
Notation échiquéenne des solutions
Fonction d'affichageSolution
# ChessCoord([8, 4, 1, 3, 6, 2, 7, 5]) -> "h8, d7, a6, c5, f4, b3, g2, e1"defChessCoord(lstColumn)->str:"""Convertit une liste de colonnes en notation algébrique"""return", ".join(#  chr(ascii) -> str; ord(str) -> asciif"{chr(indFile+ord('a')-1)}{8-indRank}"# Boucle sur le rang et colonne dans lstColumnforindRank,indFileinenumerate(lstColumn))forsolutioninQueenSolver(8):# Pour chaque solutionprint(ChessCoord(solution))# afficher la notation algébrique

1
2
3
4

89
90
91
92

a8, e7, h6, f5, c4, g3, b2, d1
a8, f7, h6, c5, g4, d3, b2, e1
a8, g7, d6, f5, h4, b3, e2, c1
a8, g7, e6, h5, b4, d3, f2, c1
...
h8, b7, d6, a5, g4, e3, c2, f1
h8, b7, e6, c5, a4, g3, d2, f1
h8, c7, a6, f5, b4, e3, g2, d1
h8, d7, a6, c5, f4, b3, g2, e1

Un générateur peut sembler identique à une fonction qui retourne une liste parreturn, mais contrairement à une liste qui contienttous ses éléments, un générateur calcule ses élémentsun par un.

importtimeit# chronomètre[n*nforninrange(10)]# une liste est entre crochets# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]36in[n*nforninrange(10)]# 36 est-il dans la liste des carrés ?# True(n*nforninrange(10))# un générateur est entre parenthèses# <generator object <genexpr> at 0x0000022DCAED1490> # l'adresse hexadécimale peut changer36in(n*nforninrange(10))# 36 est-il dans un des premiers résultats du générateur ?# Truetimeit.timeit(stmt='36 in [n * n for n in range(100)]',number=1_000_000)# quand range(maxNbr) augmente,# 7.3 stimeit.timeit(stmt='36 in (n * n for n in range(100))',number=1_000_000)# le générateur peut être plus rapide.# 1.2 s

Ainsi, le test36 in [n * n for n in range(10)] va s'effectuer sur la liste calculée en entier, alors que dans36 in (n * n for n in range(10)), qui utilise un générateur, le calcul des carrés s'arrête dès que 36 est trouvé. On peut s'en convaincre en remplaçantn * n par un appel de fonction réalisant uneffet de bord, par exemple un affichage à l'écran.

Réflexivité

[modifier |modifier le code]

Grâce à un usage intensif des dictionnaires (conteneur associatif développé avec destables de hachage), Python permet d'explorer les divers objets du langage (introspection) et dans certains cas de les modifier (intercession).

Typage

[modifier |modifier le code]

Letypage estdynamique[68]. Il n'est pas vérifié à la compilation mais à l'exécution.Il n'est pas nécessaire d'indiquer le type des variables : Python est sans typage statique explicite.

Python est fortement typé. Il interdit à l'exécution des opérations ayant peu de sens.Par exemple : concaténer par l'opérateur+ un nombre réel ou entier à une chaînestr pour l'afficher avecprint().

Il n'y a pas de conversion automatique.Python propose les fonctionsint() etstr() permettant de convertir un nombre dans un autre type :

floatPoint=3.2# Python découvre dynamiquement que floatPoint est du type floatprint("Tu as "+floatPoint+" points !")# Génère l'erreur de typage :# TypeError: can only concatenate str (not "float") to str# intPoint est du type int : entier. La fonction int() force la conversion.intPoint=int(floatPoint)# Sa valeur 3 est arrondie à l'unité inférieure.print("Tu as "+intPoint+" points !")# TypeError: can only concatenate str (not "int") to strstrPoint=str(intPoint)# strPoint est du type str : chaîne de caractèresprint("Tu as "+strPoint+" points !")# affiche "Tu as 3 points !"'

En pratique, il n'est pas utile de préfixer les noms de variables par leur type.La conversion d'un nombre versstr est automatique avec une chaîne préfixée parf en mettant la variable entre accolades à l'intérieur de la chaîne sans opérateur+ :

nbrPoint=3.2# Python reconnaît dynamiquement que nbrPoint est du type floatprint(f"Tu as{nbrPoint} points.")# affiche "Tu as 3.2 points."print(f"Tu as{int(nbrPoint)} points.")# affiche "Tu as 3 points."print(f"Tu as{nbrPoint:.0f} points.")# affiche "Tu as 3 points." avec zero décimale

Python utilise le typage dynamique dénomméduck typing : lors de l'exécution, si une méthode invoquée sur un objet a la mêmesignature qu'une méthode déclarée sur cet objet, alors c'est cette dernière méthode qui est exécutée. De ce fait, invoquer une méthode qui n'existe pas sur un objet va échouer, signifiant que l'objet en question n'est pas du bon type.

Python propose aussi un mécanisme detypage statique pour les attributs des classes grâce à l'APItrait[69] ou aupatron de conceptiondecorators.

Annotations

[modifier |modifier le code]

Depuis la version 3.0, Python propose l'annotation des variables dans les fonctions (introduit dans la PEP 3107[70]). Ce qui permet de rendre le code plus lisible sans pour autant faire office de solution de typage statique puisque rien n'oblige à suivre ces annotations[71].

defhello(name:str)->str:return"Hello{} !".format(name)hello("Alice")# Appel suggéré par les annotationshello(True)# Appel non conforme mais tout à fait fonctionnel

En complément, depuis la version 3.5, Python propose le module typing[72] (introduit dans la PEP 484[73]).

fromtypingimportListdefsplit_string(string:str)->List[str]:returnstring.split(" ")

Analyse statique

[modifier |modifier le code]

Il est possible d'effectuer une analyse statique des modules Python avec des outils comme Pylance[74], Pylint[75], mypy[44], ou PyChecker. Sans nécessiter une exécution, ces outils repèrent des fautes ou des constructions déconseillées. Par exemple, une classe qui hérite d'une classe abstraite et qui ne redéfinit pas les méthodes abstraites, ou bien des variables utilisées avant d'être déclarées, ou encore des attributs d'instance déclarés en dehors de la méthode__init__.

Déassembleur

[modifier |modifier le code]

Il est aussi possible de générer un code intermédiaire (bytecode) Python :

importdis# module déassembleurdis.dis("val = 0; val += 1")

Le résultat du bytecode est :

[Running]python-u"c:\Tool\python\inc.py"0RESUME01LOAD_CONST0(0)STORE_NAME0(val)LOAD_NAME0(val)LOAD_CONST1(1)BINARY_OP13(+=)STORE_NAME0(val)RETURN_CONST2(None)[Done]exitedwithcode=0in1.645seconds

Compilateur

[modifier |modifier le code]

L'outil ligne de commande PyInstaller[76] ou ses variantes (auto-py-to-exe, cx_Freeze, py2app sous macOS oupy2exe sous Windows) permettent de « compiler » un programme Python sous forme d'un exécutable comprenant le programme, l'interpréteur Python et toutes ses bibliothèques.

  • L'inconvénient est le poids de l'exécutable. Le programme ne tourne pas plus rapidement car il n'est pas compilé sous forme de code machine.
  • L'avantage est que tout est compris dans l'exécutable : cela simplifie sa distribution, notamment sur une autre machine où Python n'est pas installé.

Modèle objet

[modifier |modifier le code]

En Python,tout est objet[77], dans le sens qu'une variable peut contenir uneréférence vers tous les éléments manipulés par le langage : nombres, méthodes, modules, etc.. Néanmoins, avant la version 2.2, les classes et les instances de classes étaient un type d'objet particulier, ce qui signifiait qu'il était par exemple impossible de dériver sa propre sous-classe de l'objetlist.

Méthodes

[modifier |modifier le code]

Le modèle objet de Python est inspiré de celui de Modula-3[28]. Parmi ces emprunts se trouve l'obligation de déclarer l'instance de l'objet courant, conventionnellement nomméeself, comme premier argument des méthodes, et à chaque fois que l'on souhaite accéder à une donnée de cette instance dans le corps de cette méthode. Cette pratique n'est pas naturelle pour des programmeurs venant par exemple de C++ ou Java, la profusion desself étant souvent critiquée comme étant une pollution visuelle qui gêne la lecture du code. Les promoteurs duself explicite estiment au contraire qu'il évite le recours à des conventions de nommage pour les données membres et qu'il simplifie des tâches comme l'appel à une méthode de la superclasse ou la résolution d'homonymie entre données membres[78].

Python reconnaît trois types de méthodes :

  • les méthodes d'instance, qui sont celles définies par défaut. Elles reçoivent comme premier argument une instance de la classe où elles ont été définies.
  • les méthodes de classe, qui reçoivent comme premier argument la classe où elles ont été définies. Elles peuvent être appelées depuis une instance ou directement depuis la classe. Elles permettent de définir des constructeurs alternatifs comme la méthodefromkeys() de l'objetdict. Elles sont déclarées avec le décorateur@classmethod.
  • les méthodes statiques, qui ne reçoivent pas de premier argument implicite. Elles sont déclarées avec le décorateur@staticmethod.

Visibilité

[modifier |modifier le code]

Le langage a un support très limité de l'encapsulation. Il n'y a pas, comme en Java par exemple, de contrôle de l'accessibilité par des mots clefs commeprotected ouprivate.

La philosophie de Python est de différencier conceptuellement l'encapsulation du masquage d'information. Le masquage d'information vise à prévenir les utilisations frauduleuses, c'est une préoccupation desécurité informatique. Le modulebastion de la bibliothèque standard, qui n'est plus maintenu dans les dernières versions du langage, permettait ainsi de contrôler l'accès aux attributs d'un objet dans le cadre d'un environnement d'exécution restreint.

L'encapsulation est une problématique de développement logiciel. Le slogan des développeurs Python estwe're all consenting adults here[79] (nous sommes entre adultes consentants). Ils estiment en effet qu'il suffit d'indiquer, par des conventions d'écriture, les parties publiques des interfaces et que c'est aux utilisateurs des objets de se conformer à ces conventions ou de prendre leurs responsabilités. L'usage est de préfixer par un underscore les membres privés. Le langage permet par ailleurs d'utiliser un double underscore pour éviter les collisions de noms, en préfixant automatiquement le nom de la donnée par celui de la classe où elle est définie.

L'utilisation de la fonctionproperty() permet de définir des propriétés qui ont pour but d'intercepter, à l'aide de méthodes, les accès à une donnée membre. Cela rend inutile la définition systématique d'accesseurs et le masquage des données comme il est courant de le faire en C++ par exemple.

Héritage

[modifier |modifier le code]

Python supporte l'héritage multiple. Depuis la version 2.3, il utilise l'algorithme C3, issu du langageDylan[80], pour résoudre l'ordre de résolution de méthode (MRO). Les versions précédentes utilisaient unalgorithme de parcours en profondeur qui posait des problèmes dans le cas d'unhéritage en diamant[81].

Bibliothèque standard

[modifier |modifier le code]
Python est fourni « piles incluses ».

Python possède une grandebibliothèque standard, fournissant des outils convenant à de nombreuses tâches diverses. Le nombre de modules de la bibliothèque standard peut être augmenté avec des modules spécifiques écrits en C ou en Python.

La bibliothèque standard est particulièrement bien conçue pour écrire des applications utilisant Internet, avec un grand nombre de formats et de protocoles standards gérés (tels queMIME etHTTP). Des modules pour créer desinterfaces graphiques et manipuler desexpressions rationnelles sont également fournis. Python inclut également unframework detests unitaires (unittest, anciennementPyUnit avant version 2.1) pour créer des suites de tests exhaustives.

Conventions de style

[modifier |modifier le code]

Bien que chaque programmeur puisse adopter ses propres conventions pour l'écriture de code Python,Guido van Rossum a mis un guide à disposition, référencé comme PEP 8[50],[75]. Publié en 2001, il est toujours maintenu pour l'adapter aux évolutions du langage.Google propose également un guide[82].

Interfaces graphiques

[modifier |modifier le code]
Interface graphique en wxPython pour wxWidgets.

Python possède plusieurs modules disponibles pour la création de logiciels avec uneinterface graphique. Le plus répandu estTkinter[83]. Ce module convient à beaucoup d'applications et peut être considéré comme suffisant dans la plupart des cas. Néanmoins, d'autres modules ont été créés pour pouvoir lier Python à d'autresbibliothèques logicielles (« toolkit »), pour davantage de fonctionnalités, pour une meilleure intégration avec lesystème d'exploitation utilisé, ou simplement pour pouvoir utiliser Python avec sa bibliothèque préférée. En effet, certains programmeurs trouvent l'utilisation de Tkinter plus pénible que d'autres bibliothèques. Ces autres modules ne font pas partie de la bibliothèque standard et doivent donc être obtenus séparément.

Les principaux modules donnant accès aux bibliothèques d'interface graphique sontTkinter et Pmw[84] (Python megawidgets) pourTk,wxPython pourwxWidgets,PyGTK pourGTK,PyQt etPySide pourQt, et enfin FxPy pour leFOX Toolkit. Il existe aussi une adaptation de la bibliothèqueSDL :Pygame, unbinding de laSFML : PySFML, ainsi qu'une bibliothèque écrite spécialement pour Python :Pyglet.

Il est aussi possible de créer des applicationsSilverlight en Python sur la plateformeIronPython.

La communauté Python

[modifier |modifier le code]

Guido van Rossum est le principal auteur de Python, un langage de programmation largement utilisé dans divers domaines, allant du développement web à l'intelligence artificielle. Son rôle central dans l'évolution de Python lui a valu le titre humoristique de « Dictateur bienveillant à vie » (Benevolent Dictator for Life, BDFL[85]) « par intérim[24] ». Cependant, en, Guido van Rossum a annoncé sa retraite de ce rôle, se déclarant en « vacances permanentes » de ses responsabilités de BDFL[86]. Par la suite, en, il a également retiré sa candidature au conseil directeur du langage Python[87].

Après le retrait de van Rossum, la gouvernance de Python est passée à un modèle plus démocratique, sous la direction d'unConseil directeur composé de cinq membres élus. Ces membres sont principalement issus de la communauté descore developers, une équipe de développeurs ayant un accès en écriture au dépôt deCPython, l'implémentation de référence du langage Python. Cette équipe se coordonne principalement via laliste de diffusion python-dev, où sont discutées et décidées les évolutions du langage et de sa bibliothèque standard.

Les contributions de la communauté sont encouragées, et les développeurs tiers peuvent soumettre des améliorations via la plateforme de gestion de bugs et de suivi de tâchesRoundup, qui a remplacé l'ancien système basé surSourceForge. La transition versGitHub en 2017 a également facilité la collaboration ouverte et la contribution au code source de Python.

Les utilisateurs et développeurs de bibliothèques tierces peuvent échanger via diverses autres ressources en ligne, notamment le forum Usenet anglophone comp.lang.python, ainsi que des forums, mailing lists, et réseaux sociaux plus modernes commeReddit ouDiscord.

Les références aux Monty Python[27], une troupe comique britannique, sont un élément récurrent dans la culture Python[88]. Illustrant l'humour décalé[89] et omniprésent dans la communauté Python, la documentation du langage utilise souvent les termesspam eteggs commeespace réservé, en référence au célèbre sketchSpam desMonty Python, où le SPAM (un jambon en conserve) est le leitmotiv du menu truffé d'expressions en français. Ce sketch a d'ailleurs donné son nom au phénomène ducourriel non sollicité[90].

Les résultats peuvent différer par rapport à la documentation officielle de Python[91] :

Command-lineexampleHerearesomeexamplesoftherandomcommand-lineinterface:PSC:\Tool\python># Choose one at randomPSC:\Tool\python>python-mrandomeggbaconsausagespam"Lobster Thermidor aux crevettes with a Mornay sauce"spamPSC:\Tool\python>python-mrandomeggbaconsausagespam"Lobster Thermidor aux crevettes with a Mornay sauce"eggPSC:\Tool\python># With explicit argumentsPSC:\Tool\python>python-mrandom--choiceeggbaconsausagespam"Lobster Thermidor aux crevettes with a Mornay sauce"LobsterThermidorauxcrevetteswithaMornaysauce

Adoption de Python

[modifier |modifier le code]
Article détaillé :Liste de logiciels Python.

Plusieurs entreprises ou organismes mentionnent sur leur site officiel[92] qu'elles utilisent Python :

Python est aussi le langage de commande d'un grand nombre de logiciels libres :

Et commerciaux :

Implémentations du langage

[modifier |modifier le code]

Outre la version de référence, nomméeCPython (car écrite en langageC), il existe d'autres systèmes mettant en œuvre le langage Python[98] :

Ces autres versions ne bénéficient pas forcément de la totalité de la bibliothèque de fonctions écrites en C pour la version de référence, ni des dernières évolutions du langage.

Distributions

[modifier |modifier le code]

Différentes distributions sont disponibles, qui incluent despaquets dédiés à un domaine donné :

  • La version officielle[103],[104] de la fondation logicielle Python. Les bibliothèques complémentaires sont à installer à la demande avec pip, conda ou poetry.
  • ActivePython[77] : disponible en version gratuite (ne pouvant être « utilisée en production ») ou commerciale.
  • Enthought (en) Canopy : distribution commerciale à usage scientifique, disponible en version gratuite sous le nom de Canopy Express[105].
  • Anaconda ou Miniconda[106] optimisée en taille : distribution à usage scientifique, disponible en version gratuite ou commerciale.
  • Intel Distribution for Python : distribution installable par conda ou pip, intégrant labibliothèque oneMKL du noyau mathématique Python (en) d'Intel afin d'accélérer les calculs numériques[95] deNumPy etSciPy. Elle est disponible gratuitement seule, ou bien intégrée àIntel Parallel Studio, qui nécessite une licence payante.
  • Pyzo : distribution scientifique destinée à être facile d'utilisation[107].
  • WinPython[108] : distribution à usage scientifique avec l'éditeurSpyder.

Ce ne sont pas desimplémentations différentes du langage Python : elles sont basées sur la référence CPython, mais sont livrées avec plus ou moins de bibliothèques préinstallées. Ces modules tiers[7] peuvent être en versions différentes d'une distribution à l'autre, introduire des contraintes de dépendance ou avoir des cycles de développement propres qui peuvent ne pas être synchronisés avec la dernière version officielle.

Développement

[modifier |modifier le code]

Les PEP

[modifier |modifier le code]

Les propositions d'amélioration de Python (ou PEP :Python Enhancement Proposal) sont des documents textuels qui ont pour objet d'être la voie d'amélioration de Python et de précéder toutes ses modifications[109]. Un PEP est une proposition d'orientation pour le développement(process PEP), une proposition technique(Standard Track PEP) ou une simple recommandation (Informational PEP). La PEP la plus connue est la PEP 8[50] pour son guide sur le style de code.

Historique des versions

[modifier |modifier le code]

L'historique présente un extrait des nouveautés majeures du logiciel Python par version avec la date de début de sortie et celle de fin de support. Les mises à jour de sécurité sont assurées jusqu'à la date entre parenthèses.

Chaque nouveauté correspond à une proposition d'amélioration de Python (PEP) acceptée dont le numéro apparaît en dernière colonne. Ce tableau n'est pas exhaustif. Se reporter, en première colonne, à chaque version pour l'ensemble des liens des PEP avec leurs auteurs.

Historique déroulable des versions
VersionDébutFinNouveautés majeuresPEP
Ancienne version, plus prise en charge : 1.5.2[110]
  • Ajout du mot cléassert
  • import spam.ham.eggs importe une hiérarchie de modules
  • regex devientre
  • Les exceptions sont maintenant des classes
Ancienne version, plus prise en charge : 1.6[111]
  • ma_list.append('accepte un seul argument')
  • str(1L) == '1' etrepr(1L) == '1L'
  • Les chaînes de caractères ont des méthodes :" abc ".strip()
  • L'expression régulièrere accepte les chaînes Unicode
Ancienne version, plus prise en charge : 2.0[35]
  • Changement majeur : support d'Unicode
  • Compréhension de liste[n for n in range(7) if n % 2 == 0]
  • Opérateurs avec assignement :a += b,a *= b
Ancienne version, plus prise en charge : 2.1[112]
  • Ajout des références faibles (weak references)
  • Comparaisons riches par__lt__,__le__
  • Framework d'avertissement
  • Le module__future__ rend les transitions plus douces
  • La version 2.0.1 du est la1re version compatibleGPL[113]
  • 205
  • 207
  • 230
  • 236
Ancienne version, plus prise en charge : 2.2[114]
  • Ajout desitérateurs etgénérateurs
  • a // b pour la division entière
  • Unification deType et deClass pour hériter des types de base
  • 234
  • 238
  • 252
Ancienne version, plus prise en charge : 2.3[115]
  • Support d'Unicode
  • Ajout des fonctionsenumerate() etsum()
  • Le typebool est distinct d'unint
  • 277
  • 279
  • 285
Ancienne version, plus prise en charge : 2.4[116]
  • Conversion automatiqueint enlong
  • @classmethod décore fonction et méthode
  • reversed(xrange(1,4)) etsorted pour trier
  • sort trie seloncmp,key etL.sort(reverse=True)
  • 237
  • 318
  • 322
  • 327
Ancienne version, plus prise en charge : 2.5[117]
  • Sans: dansvalIfTrue if condition else valIfFalse
  • from .string import name1, name2 en relatif
  • Méthodessend,throw etclose de générateurs
  • with open('c:\tool\python\pep-343.html', 'r') as file:
Ancienne version, plus prise en charge : 2.6[118]

(oct. 2013)

  • Préparation de la migration avec Python 3
  • ModulesJSON, multiprocessing, contextmanager et fractions
  • Nouvelle syntaxe de formatage de chaînes de caractères
  • Classes de bases abstraites
  • Décorateurs de classes
  • 3xxx
  • 371
  • 3101
  • 3119
  • 3129
Ancienne version, plus prise en charge : 2.7[36]
  • Dictionnaire ordonné :from collections import OrderedDict
  • '{:,}'.format(10800) donne'10,800'
  • Le moduleargparse analyse les arguments d'un programme
  • memoryview visualise un objet binaire
Ancienne version, plus prise en charge : 3.0[41]
  • a/b est la vraie division par défaut
  • Fusion des typesint etlong
  • Plan Python 3.0
  • print "Python 2" devientprint("Python 3")
  • L'encodage source par défaut est UTF-8.
  • 0237
  • 0238
  • 3100
  • 3105
  • 3120
Ancienne version, plus prise en charge : 3.1[42]

(juin 2012)

  • Ajout d'un type de dictionnaire ordonné,
  • Spécification du séparateur de millier,
  • Module d'entrées/sorties 'io' rendu plus rapide.
  • 372
  • 378
  • 3116
Ancienne version, plus prise en charge : 3.2[119]

(fév. 2016)

  • Le moduleargparse analyse les arguments d'un programme
  • Modification de la gestion des fichiers compilés.pyc
  • Ajout des certificats pour le protocole HTTPS
  • Amélioration du modulepickle
  • Réintroduction de la fonctioncallable()
  • 389
  • 3147
  • 3333
Ancienne version, plus prise en charge : 3.3[120]

(sept. 2017)

  • yield from dansfor
  • venv incorpore des fonctionnalités du modulevirtualenv
  • Refonte de la hiérarchie des erreurs système (I/O).
  • u'unicode' est de nouveau acceptée
  • Le modulefaulthandler pour déboguer
  • Support pour la compressionLZMA
  • Moduleunittest.mock pour lesMock
Ancienne version, plus prise en charge : 3.4[121]

(mars 2019)

  • Asynchrone programmation avec le moduleasyncio.
  • Le gestionnaire de packetpip[106] est fourni.
  • 3156
Ancienne version, plus prise en charge : 3.5[122]

(sept. 2020)

  • MatrixA @ MatrixB multiplie deux matrices
  • import typing pour le type hinting.
  • await etasync pour la programmation asynchrone
  • 465
  • 484
  • 492
Ancienne version, plus prise en charge : 3.6[123]

(déc. 2021)

  • Formattage desf"chaînes de caractères"[124] :
>>>nbr=42>>>print(f'f-string ={nbr}')# f-string = 42
  • 498




  • 506
  • 515
Ancienne version, plus prise en charge : 3.7[125]

(juin 2023)

  • breakpoint insère un point d'arrêt.
  • Le modulecontextvars supporte les variables de contexte.
  • Nouveau mode de développement (X).
  • async etawait sont des mots-clefs réservés.
  • time.time_ns en nanosecondes etclock.
  • Un dictionnaire s'affiche dans l'ordre de sa création[126].
  • 553
  • 567
Ancienne version, plus prise en charge : 3.8[127]

(oct. 2024)

  • Opérateur morse:= :if (lenInput := len(strInput)) > 10:
  • Dernière version supportant Windows 7.
Ancienne version, plus prise en charge : 3.9[129],[130]

(oct. 2025)

  • union de dictionnaires
  • typing.List simplifié enlist
  • Le modulezoneinfo supporte les fuseaux horaires IANA
  • Suppression de préfixes ou suffixes dansstr
  • Le modulegraphlib trie des graphes
  • Périodicité annuelle des versions mineures de Python en octobre
  • 584
  • 585
  • 602
  • 615
  • 616
Ancienne version, toujours prise en charge : 3.10[131]

(oct. 2026)

  • Écriture des unions de types sous la formeX
  • Spécification du paramètre des variables
  • TypeAlias définit un alias de type
  • zip(strict) en ValueError sur listes différentes
  • Amélioration de la mise au point[132]
  • Spécification de la correspondance des modèles structurels
  • Motivation et justification
  • Tutorial
  • 604
  • 612
  • 613
  • 618
  • 626
  • 634
  • 635
  • 636
Ancienne version, toujours prise en charge : 3.11[133][134]
  • TypeVarTuple pour fonction générique
  • Gestion des exceptions :ExceptionGroup
  • (Not)Required dansTypeDict spécifie si l'élément est optionnel
  • typing.LiteralString : chaîne de caractère littérale
  • except*,add_note àBaseException
  • Ajout du moduletomllib pour l'analyse des fichiersTOML
  • Selfannote uneinstance declasse
  • Performance deCpython : +25%
  • 646
  • 654
  • 655
  • 675
  • 678
Ancienne version, toujours prise en charge : 3.12[135]
  • 669
  • 684
  • 692
  • 701
Ancienne version, toujours prise en charge : 3.13[136]
  • 703
  • 744
Dernière version stable:3.14[137]
  • Modèle de chaînet"...{variable!type}"[138]
>>>pi=3.14>>>print(t'Améliore f-string dans Python{pi!s}.')
  • Free-threaded Python
Version future: 3.15[140]
  • profilage maintenant la performance
  • 790
Légende :
Ancienne version
Ancienne version, toujours prise en charge
Dernière version stable
Dernière version avancée
Version future

Python 3

[modifier |modifier le code]

En 2009, c'est la version 3 de Python, qui remplace de plus en plus la version 2 (le projet était au départ appelé « Python 3000 » ou « Py3K »), sans compatibilité descendante avec la série des versions 2.x, dans le but d'éliminer les faiblesses du langage. La ligne de conduite du projet était de « réduire la redondance de Python par la suppression de méthodes obsolètes ». Python 3.0a1, la première version alpha, avait été publiée le[141]. Le PEP 3000[142] détaille les changements prévus. Les programmeurs en Python 2 sont incités à migrer vers la version 3[143].

Philosophie

[modifier |modifier le code]

Python 3 a été développé avec la même philosophie que dans ses versions antérieures, donc toute référence à la philosophie de Python s'appliquera aussi bien à la version 3. Cependant, le langage avait fini par accumuler nombre de méthodes redondantes. En recherchant à supprimer ce qui est redondant dans le langage et ses modules, Python 3 suit la ligne directrice de Python « Ne devrait subsister qu'une seule méthode à la fois optimaleet naturelle pour chaque chose ».

Python 3 reste un langage multiparadigme. Les programmeurs auront encore le choix entre l'orientation objet, la programmation structurée, la programmation fonctionnelle et d'autres paradigmes ; Python 3 a pour but d'être utilisé de manière plus naturelle que dans les versions 2.x, bien que sonprint nécessite l'emploi de parenthèses contrairement à Python 2.

Planning et compatibilité

[modifier |modifier le code]

Python 3.0a1, la première version alpha de Python 3.0, fut publiée le. Les versions 2.x et 3.x de Python seront publiées en parallèle pendant plusieurs cycles de développement, pendant lesquels la série des 2.x subsistera principalement pour la compatibilité, en incluant quelques caractéristiques importées depuis Python 3.x. Le PEP 3000[142] contient plus d'informations à propos du processus de publication d'une version.

CommePerl 6, Python 3.0 rompt la compatibilité descendante (rétrocompatibilité). L'utilisation de code écrit pour les séries 2.x n'est pas garantie avec Python 3.0. Ce dernier apporte des changements fondamentaux, comme le passage complet à l'Unicode et pour cette raison une nécessaire distinction entre les chaînes de caractère et les objets « bytes ». Le typage dynamique associé à certaines méthodes sur les objets de type dictionnaire rend une transitionparfaite de Python 2.x vers Python 3.0 très délicate. Un outil nommé2to3 traduit le plus gros des versions 2.x vers les versions 3.x et indique les zones de code demandant des finitions par des commentaires spéciaux et des mises en garde.Dans sa préversion,2to3 semble réussir franchement à réaliser une traduction correcte[144]. Dans le cadre d'une migration de Python 2.x vers Python 3.x, le PEP 3000 recommande de conserver le code original comme base des modifications et de letraduire pour la plateforme 3.x en utilisant2to3.

Python 2.6 fournit un début de compatibilité ascendante, aussi bien qu'un mode « mise en garde » qui devrait faire prendre conscience des problèmes potentiels de transition pour le passage à Python 3[145].

Python pour smartphones

[modifier |modifier le code]

Il existe des versions de Python adaptées pour les smartphonesAndroid[146].

Scripting Layer for Android (en) (SL4A) n'est plus supporté :

importandroid# possibilité de faire des petites interfaces graphiques# telephone localdroid=android.Android()# client lié au serveur local lancé par l'application SL4Adroid.vibrate(3)# fait vibrer le téléphone pendant trois secondesresult=droid.smsSend(phoneNbr,"SMS")# envoyer un SMSdroid.cameraInteractiveCapturePicture("/sdcard/picture.jpg")# allumer la caméra# téléphone distant à l'adresse 192.168.0.5, avec SL4A lancé sur le port 9887# android.Android('192.168.0.5', 9887)

SuriPhone,Kivy est recommandé[147].

Un portage de Python 3.2 sur les terminauxBlackberry est sorti en, pour le systèmeBlackBerry OS 10[148].

Filmographie

[modifier |modifier le code]

Python : Le documentaire

[modifier |modifier le code]
  • Python: The Documentary, 2025, CultRepo[149]

Le, la réalisatrice danoise Ida Lærke Bechtle[150] présente son long métrage « Python : Le documentaire. Une histoire d’origine » (Python: The Documentary. An origin story) à la conférence PyCon à Athènes[151].

Le film est produit par Cult.Repo[152] à Berlin en relation avec la société irlandaise Open Source World Films Limited : Emma Tracey est créditée au générique.

Pendant une année[150], le tournage se déroule aux Pays-bas, États-Unis, Canada et en Australie.

Parole de femme

[modifier |modifier le code]

Ida Bechtle donne la parole à la communauté féminine[153] de Python ouverte à la diversité[154] :

PyLadies.
  • Mariatta Wijaya anime des conférences PyCascades surPyLadies[155]. Elle a été présidente de la conférence PyCon US. Elle est l'autrice des PEP 588 et PEP 8001 ;
  • Jessica McKellar (en) est directrice[156] de la fondation Python de 2012 à 2014;
  • Lisa Guo[94] est interviewée sur la migration de Python chez Instagram ;
  • Lisa Roach[157] relate comment elle a résolu la migration de Python 2 vers la version 3 dans les applications de Meta. Elle est l'autrice du PEP 526. C'est une oratrice régulièrement invitée aux conférences sur Python.

Pythonista, Pythoneer et fondateur

[modifier |modifier le code]

Ida Bechtle capture l'humanité desPythonistas[158] (utilisateur),Pythoneers[158] (expert) et fondateurs qui lui ont ouvert leurs portes sur les lieux de naissance du langage :

importthis# Affiche :

« TheZen of Python, by Tim Peters[79] ». Il a donné les documents originaux sur Python à la réalisatrice pour le montage du film[162].

Ida Bechtle confie à Barry Warsaw la strophe « même si, de prime abord, elle n'est pas évidente, à moins d'être Néerlandais. ».

  • Brett Cannon[159] (Microsoft[163], PSF, PEP 2, PEP 758, PEP 8001) évoque Python pour l'atterrissage sur Mars avec un parachute. Dans l'initiation sur Python par la NASA, les enfants de 12 ans apprennent à coder du morse[164] lors de l'atterrissage martien. Barry Warsaw fait tourner la tête à l'opérateur morse:= du PEP 572.
  • Guido van Rossum (CWI, CNRI, PSF, PEP 8, PEP 572, Microsoft, PEP 750[139]) accepte la controversée[165] PEP 572[128]. Affecté par la rage des débats, il tire un trait sur ses activités de BDFL[7] mises en pointillées par le stress[24].

Guido van Rossum se tourne vers d'autres fenêtres[7]. Il rejoint l'équipe composée de Brett Cannon, Steve Dower[166] (CPython, PEP 731, PEP 8013) et Barry Warsaw[159].

Tel le père Noël de ce pittoresquecirque volant au-dessus des continents « à l'exception de l'Antarctique », Barry Warsaw referme la parenthèse du générateur pythonique[79] jaillissant avec peps dans l’esprit de Guido van Rossum.

Notes et références

[modifier |modifier le code]
  1. a etb(en) Guidovan Rossum, « The History of Python: A Brief Timeline of Python », surblogspot,(consulté le).
  2. a etb« Python 3.14.3 and 3.13.12 are now available! »,(consulté le)
  3. « Python 3.15.0 alpha 5 (yes, another alpha!) »,(consulté le)
  4. a etbLiamTung, « Python reste le langage le plus utilisé pour la data science, suivi de SQL », surZDNet,(consulté le)
  5. MaryseGros, « PyData Paris présente les projetsbig data réalisés avec Python », surLe Monde informatique,(consulté le)
  6. OlivierEzratty, « L'informatique quantique », surMOOC Digital Paris(consulté le)
  7. abcde etfJacquesCheminat, « Le créateur de Python, Guido Van Rossum, rejoint Microsoft », surLe Monde informatique,(consulté le)
  8. ValentinMuller, « Python : LE langage pour débuter », surmedium.org,(consulté le)
  9. Downey, Elkner et Meyers 2016,p. 5. Introducing programming with Python: "There are thirteen paragraphs".
  10. a etb« La programmation Python au lycée », surTice-education,(consulté le)
  11. PerrineDouheret, « La Nuit du Code : quand programmer devient une aventure ! », surDrane,(consulté le)
  12. (de) « Nuit du c0de 2025 », surLycée Français de Berlin (Französisches Gymnasium Berlin),(consulté le)
  13. « Retour sur la nuit du code en vidéo : une magnifique édition 2024 » [« ナイト・オブ・コードの振り返りをビデオで見る: 壮大な 2024 年版 »], surLycée français international de Tokyo 「東京国際フランス学園」,‎(consulté le)
  14. « La semaine HOUR OF CODE » [« 编程一小时周 »], surLycée français international Charles-de-Gaulle de Pékin 〖北京法国国际学校〗,‎(consulté le)
  15. abc etdJulienLausson, « Barack Obama code pour encourager les jeunes à programmer », surNumerama,(consulté le)
  16. VéroniqueArène, « Une heure pour enseigner les bases du code à l'école », surLe Monde informatique,(consulté le)
  17. VéroniqueArène, « Comcyber réorganise un concours de hack étudiant dans toute la France », surLe Monde informatique,(consulté le)
  18. RomainCharbonnier, « Passe ton hack d’abord : le challenge pour initier les jeunes à la cybersécurité », surGuardia,(consulté le)
  19. « Programmes des classes préparatoires aux Grandes Ecoles »[PDF], surMinistère de l'Education Nationale, de l'Enseignement supérieur et de la Recherche,(consulté le),p. 5, 8
  20. ab etc(en) TobiasKohn et JacquelineStaub (Volume 23, Issue 4, pp. 837–868), « The Two Powers: How Pascal and Python Shaped Programming Education », surInformatics in Education,(consulté le)
  21. PhilippeMoreau, « L'Informatique (vraiment) Pour Tous en classes préparatoires aux grandes écoles - La programmation en Python, SQL et les algorithmes dévoilés de A à Z : Évaluation 11. Partie II : Concours Mines Ponts épreuve IPT 2015. », surcairn,(consulté le) :« Le langage à utiliser est Python »
  22. WalterDamin, « Mathématiques 24 jours pour préparer l’oral des concours Centrale/Supélec/Mines/Ponts : Rappels autour de Python pour préparer l’oral de Math II de Centrale-Supélec »,Fiches d'aide Python pour le concours Centrale-Supélec, surcairn,(consulté le)
  23. abc etd(en) LambertMeertens, « The Origins of Python »,Computer Science / Review Essay Vol. 7, NO. 3, surInference,(consulté le)
  24. ab etcDamienLeloup, « Je n’imaginais pas que le langage informatique Python connaîtrait un tel succès », surLe Monde,(consulté le)
  25. a etb(en) Guidovan Rossum, « Why was Python created in the first place? », surpython.org,(consulté le)
  26. (en) JackJansen, « Introduction to MacPython », surCWI,(consulté le) :« the very first implementation was actually done on a Macintosh »
  27. a etbLutz 2009,p. 17.
  28. a etbLutz 2006,p. XIX.
  29. a etb(en) Guidovan Rossum, « Python 0.9.1 part 01/21 », suralt.sources,(consulté le)
  30. (en) Guidovan Rossum, « Release 0.9.0 (February 1991) », surpython.org,(consulté le)
  31. (en) AndrewDalke, « Ancient Releases », surpython.org,(consulté le)
  32. a etb(en) « Grail Internet Browser », surCNRI,(consulté le)
  33. Lutz 2006,p. 714.
  34. a etb(en) « Computer Programming for Everybody », surPython.org(consulté le).
  35. a etb(en) A.M.Kuchling et MosheZadka, « What's New in Python 2.0 », surarchive.org,(consulté le)
  36. a etb(en) A.M.Kuchling, « What's New in Python 2.7 », surpython.org,(consulté le)
  37. (en) Andrew M.Kuchling, « Python Warts », surpython.org,(consulté le)
  38. (en) Guidovan Rossum, « Unifying types and classes in Python 2.2 », surpython.org,(consulté le)
  39. (en) « History of the software », surpython.org,(consulté le)
  40. (en) Guidovan Rossum, « The Rietveld server on App Engine », surgithub,(consulté le)
  41. a etb(en) Guidovan Rossum, « What's New in Python 3.0 », surpython.org,(consulté le)
  42. a etb(en) RaymondHettinger, « What's New in Python 3.1 », surpython.org,(consulté le)
  43. (en) DrewHouston, « Welcome Guido! », surdropbox,(consulté le)
  44. a etb(en) TusharSadhwani, « The Comprehensive Guide to mypy », surmedium.com,(consulté le)
  45. (en) « Thank you, Guido », surdropbox,(consulté le)
  46. « Python est le langage de programmation le plus utilisé et il ne montre aucun signe de ralentissement, selon l'index TIOBE de janvier 2022 », surDeveloppez.com(consulté le)
  47. PaulKrill ((en)Infoworld. Adapté par Louise Costa), « Poussée par l'IA, la popularité de Python ne faiblit pas », surLe Monde informatique,(consulté le)
  48. Swinnen 2012,p. 25-26.
  49. Swinnen 2012,p. 23-26.
  50. ab etc(en) Guidovan Rossum, BarryWarsaw et AlyssaCoghlan, « PEP 8 - Style Guide for Python Code », surPython.org,(consulté le).
  51. a etb(en) Guidovan Rossum et RaymondHettinger, « PEP 308 – Conditional Expressions », surpython.org,(consulté le)
  52. (en) « keyword --- Testing for Python keywords » [« Tester si des chaînes sont des mot-clés Python »], surpython.org,(consulté le)
  53. « Fonctions natives », surpython.org,(consulté le)
  54. (en) « Python 3.0 - Core Language Changes ».
  55. (en) « PEP 3104 - Access to Names in Outer Scopes ».
  56. ThomasCollart, « La fonction enumerate en Python », surComment coder(consulté le)
  57. (en) NeilSchemenauer et Guidovan Rossum (Les objetsbytes ont été introduits par le PEP 358), « PEP 358 – The “bytes” Object », surpython.org,(consulté le)
  58. a etb(en) Guidovan Rossum, « PEP 3137 – Immutable Bytes and Mutable Buffer », surpython.org,(consulté le)
  59. (en) « collections — Container datatypes », surPython documentation(consulté le)
  60. (en) « typing — Support for type hints », surPython documentation(consulté le)
  61. a etb(en) BarryWarsaw (Les compréhensions ont été introduites dans le PEP 202), « PEP 202 – List Comprehensions », surpython.org,(consulté le)
  62. (en) BarryWarsaw (les compréhensions de dictionnaires et d'ensembles dans le PEP 274), « PEP 274 – Dict Comprehensions », surpython.org,(consulté le)
  63. « 3. Data model : 3.3. Special method names », surpython.org,(consulté le)
  64. a etb(en) GregoryEwing, « PEP 380 – Syntax for Delegating to a Subgenerator », surpython.org,(consulté le)
  65. (en) « Diversity », surpycon.org,(consulté le)
  66. (en) HassanAbid, « Respect,Diversity with Pythonists and Djangonauts » [« 존중 다양성 »], surmedium.com,‎(consulté le)
  67. ThierryNoisette, « La fondation Python renonce à une subvention de 1,5 million de dollars plutôt qu’à ses valeurs », surzdnet,(consulté le)
  68. Swinnen 2012,p. 16-17, 76, 81, 125, 146.
  69. (en) « traits 7.0.2 : Observable typed attributes for Python classes », surPython Package Index,(consulté le)
  70. (en) « PEP 3107 -- Function Annotations », surPython.org(consulté le).
  71. (en) Collin Winter et Tony Lownds, « Fundamentals of Function Annotations », surwww.python.org,(consulté le).
  72. « 26.1. typing — Support for type hints — Python 3.6.10 documentation », surdocs.python.org(consulté le).
  73. (en) « PEP 484 -- Type Hints », surPython.org(consulté le).
  74. StanAdkens, « Microsoft dévoile Pylance, sa nouvelle extension Python pour Visual Studio Code », surdeveloppez.com,(consulté le)
  75. a etbCyrilL'Orphelin, « Outils d'analyse et de mesure de la qualité du code », surCNRS Actions Nationales de Formation,(consulté le)
  76. KurtisPykes, « Deux méthodes simples pour convertir un fichier Python en fichier Exe », surdatacamp,(consulté le)
  77. a etb(en) MarkPilgrim, « Your First Python Program : 1.5 Everything Is An Object » [« Plongez au coeur de Python »], surDive Into Python 3,(consulté le)
  78. (en) « Why must ‘self’ be used explicitly in method definitions and calls? », surpython.org,(consulté le)
  79. ab etcentwanne, « Les secrets d'un code pythonique », surZeste de Savoir,(consulté le)
  80. Kim Barrett, Bob Cassels, Paul Haahr, David A. Moon, Keith Playford et P. Tucker Withington, « A monotonic superclass linearization for Dylan »,ACM SIGPLAN Notices,vol. 31,no 10,‎,p. 69-82(DOI 10.1145/236337.236343,lire en ligne).
  81. (en) MicheleSimionato, « The Python 2.3 Method Resolution Order », surpython.org,(consulté le)
  82. a etb(en) « Google Python Style Guide », surgithub,(consulté le)
  83. Swinnen 2012,p. 79-105.
  84. (en) GregMcFarlane, « Getting started with Pmw », surStanford National Accelerator Laboratory,(consulté le)
  85. a etb(en) HervéBeraud, « Python after Guido BDFL, the future of the governance of python », surmedium.com,(consulté le)
  86. (en) « [python-committers] Transfer of power », surwww.mail-archive.com(consulté le).
  87. (en-US) « Steering Council nomination: Guido van Rossum (2020 term) », surDiscussions on Python.org,(consulté le).
  88. « 1. Mise en bouche », surpython.org,(consulté le) :« Faire référence aux sketchs des Monty Python dans la documentation n'est pas seulement permis, c'est encouragé ! »
  89. (en) AaronWatters, « Legal Issues », surpython.org,(consulté le)
  90. (en) MarthaBarnette, StefanieLevine et GrantBarrett, « Newsletter: Lobster Thermidor Aux Crevettes With a Mornay Sauce, Garnished With Truffle Pâté, Brandy, and a Fried Egg on Top, and Spam », surA Way with Words,(consulté le)
  91. (en) Guidovan Rossum et RaymondHettinger (from C source provided by Adrian Baddeley), « random — Generate pseudo-random numbers », surpython.org,(consulté le)
  92. (en) « Quotes about Python », surpython.org,(consulté le)
  93. CyrilleChausson, « Guido van Rossum, le père de Python, passe de Google à Dropbox », surLeMagIT,(consulté le)
  94. a etb(en) MichelleGienow, « Instagram Makes a Smooth Move to Python 3 », surThe New Stack,(consulté le)
  95. a etb(en) SherryChang, « Using the Intel Distribution for Python », surNASA,(consulté le)
  96. a etb(en) Daniel G.Shafer, « Space shuttle engineers use Python to streamline mission design », surZDNet,(consulté le)
  97. (en) « Python for ArcGIS », surarcgis,(consulté le)
  98. « PythonImplementations - Python Wiki », surwiki.python.org(consulté le)
  99. « Brython », surbrython.info(consulté le).
  100. « shedskin »[archive du], surgoogle(consulté le)
  101. ThomasWouters, JeffreyYasskin et CollinWinter, « unladen-swallow »[archive du], surgoogle(consulté le)
  102. (en) WindelBouwman et ShingLyu, « RustPython: A Python Interpreter written in Rust », surgithub,(consulté le)
  103. (en) « BeginnersGuide : Downloading Python », surpython.org,(consulté le)
  104. Swinnen 2012,p. X, 381.
  105. (en) JamesCoombes, « Enthought Python Canopy Express », surUniversité du Texas à Austin,(consulté le)
  106. a etbFuchs et Poulain 2024,p. 383.
  107. Cordeau et Pointal 2025,p. xiv, 6.
  108. RomainValidire, « Installation WinPython », surLycée Bertran de Born,(consulté le)
  109. (en) « PEP 0 – Index of Python Enhancement Proposals (PEPs) », surpython.org,(consulté le)
  110. (en) « What's New in Python 1.5 », surpython.org,(consulté le)
  111. (en) « What's New in Python 1.6 », surpython.org,(consulté le)
  112. (en) A.M.Kuchling, « What's New in Python 2.1 », surarchive.org,(consulté le)
  113. « Licence de Python, versions 2.0.1, 2.1.1 et suivantes », surgnu.org,(consulté le)
  114. (en) A.M.Kuchling, « What's New in Python 2.2 », surpython.org,(consulté le)
  115. (en) A.M.Kuchling, « What's New in Python 2.3 », surpython.org,(consulté le)
  116. (en) A.M.Kuchling, « What's New in Python 2.4 », surpython.org,(consulté le)
  117. (en) A.M.Kuchling, « What's New in Python 2.5 », surpython.org,(consulté le)
  118. (en) A.M.Kuchling, « What's New in Python 2.6 », surpython.org,(consulté le)
  119. (en) RaymondHettinger, « What's New in Python 3.2 », surpython.org,(consulté le)
  120. (en) « What's New in Python 3.3 », surpython.org,(consulté le)
  121. (en) R. DavidMurray, « What's New in Python 3.4 », surpython.org,(consulté le)
  122. (en) ElvisPranskevichus, « What's New in Python 3.5 », surpython.org,(consulté le)
  123. (en) ElvisPranskevichus et YurySelivanov, « What's New in Python 3.6 », surpython.org,(consulté le)
  124. Fuchs et Poulain 2024,p. 26.
  125. (en) ElvisPranskevichus, « What's New in Python 3.7 », surpython.org,(consulté le)
  126. Fuchs et Poulain 2024,p. 67.
  127. RaymondHettinger, « Les nouveautés de Python 3.8 », surpython.org,(consulté le)
  128. ab etc(en) ChrisAngelico, TimPeters et Guidovan Rossum, « PEP 572 – Assignment Expressions », surpython.org,(consulté le)
  129. ŁukaszLanga, « Les nouveautés de Python 3.9 », surpython.org,(consulté le)
  130. BillFassinou, « Toutes les versions de Python inférieures à 3.6 sont maintenant en fin de vie », surdeveloppez,(consulté le)
  131. PabloGalindo Salgado, « Les nouveautés de Python 3.10 », surpython.org,(consulté le)
  132. Fuchs et Poulain 2024,p. 16.
  133. PabloGalindo Salgado, « Les nouveautés de Python 3.11 », surpython.org,(consulté le)
  134. Fuchs et Poulain 2024,p. 10.
  135. (en) AdamTurner (trad. Jade Emy), « What's New in Python 3.12 », surpython.org,(consulté le)
  136. (en) AdamTurner et ThomasWouters, « What's New in Python 3.13 », surpython.org,(consulté le)
  137. (en) AdamTurner et Hugovan Kemenade, « What's New in Python 3.14 », surpython.org,(consulté le)
  138. (en) KMayuresh, « Python 3.14: Seven Cool New Features You Should Know », surmedium.com,(consulté le)
  139. ab etc(en) JimBaker, Guidovan Rossum, PaulEveritt, KoudaiAono, LysandrosNikolaou et DavePeck, « PEP 750 – Template Strings », surpython.org,(consulté le)
  140. (en) « What's New in Python 3.15 », surpython.org,(consulté le)
  141. (en) Guidovan Rossum, « Python 3000 released as 3.0a1 », surcomp.lang.python,(consulté le)
  142. a etb(en) Guidovan Rossum, « PEP 3000 – Python 3000 », surpython.org,(consulté le)
  143. (en) MatsWichmann, « Should I use Python 2 or Python 3 for my development activity? », surpython.org,(consulté le)
  144. (en) SamRuby, « 2to3 », surintertwingly,(consulté le)
  145. (en) NealNorwitz et BarryWarsaw, « PEP 361 – Python 2.6 and 3.0 Release Schedule », surpython.org,(consulté le)
  146. (en) « 6. Using Python on Android », surpython.org,(consulté le) :« Buildozer, from the Kivy project »
  147. (en) « 7. Using Python on iOS », surpython.org,(consulté le)
  148. (en) « blackberry/Python », surgithub,(consulté le) :« This repository was archived by the owner on Sep 4, 2019. »
  149. (en) jzb, « Python: The Documentary », surLWN.net,(consulté le)
  150. a etb(en) DavidCassel, « Guido van Rossum Revisits Python’s Life in a New Documentary », surThe New Stack,(consulté le)
  151. (en) « Python: the Documentary - Premiere », surpycon.gr,(consulté le)
  152. (en) PhilippAcsany, « The Python Documentary Celebrates History While Developer Surveys Celebrate Python », surReal Python,(consulté le)
  153. (en) OlgaEleftherakou (Όλγα Ελευθεράκου), « Statistical Analysis for Women’s Rights in Python : Code Like A Girl » [« YaY! Στατιστική Ανάλυση για τα Δικαιώματα των Γυναικών σε Python »], surmedium.com,‎(consulté le)
  154. (en) YancyDennis, « The Rise of PyLadies: Empowering Women in Python », surMedium,(consulté le)
  155. (en) ElaineWong, LorenaMesa et MariattaWijaya, « 9 Years of PyLadies: Lessons Learned and What Comes Next », surPyCascades,(consulté le)
  156. (en) « Current and Past PSF Officers & Board Members », surpython.org,(consulté le)
  157. (en) « Lisa Roach », surWomen Talk Design,(consulté le)
  158. a etb(en) ArpitOmprakash, « Are you a Pythonista? », surmedium.com,(consulté le)
  159. ab etc(en) LiamTung, « Python programming: We want to make the language twice as fast, says its creator », surZDNet,(consulté le)
  160. (en) Guidovan Rossum, « Origin of BDFL : All Things Pythonic », surartima,(consulté le)
  161. (en) TimPeters, « PEP 20 – The Zen of Python », surpython.org,(consulté le)
  162. (en) TimPeters, « Python documentary going live this Thursday, August 28 », surpython.org,(consulté le)
  163. (en) « Staying for Python's Community: An Interview with Brett Cannon PyCon 2023 », surMicrosoft,(consulté le)
  164. (en) KimOrr, « Code a Mars Landing », surNASA,(consulté le) :« Morse_Dict = { 'A':'.-', 'B':'-...', 'C':'-.-.' »
  165. (en) DustinIngram (PyCon Cleveland 4 mai 2019), « PEP 572: The Walrus Operator », surdustingram.com,(consulté le)
  166. (en) DavidRamel (Steve Dower à EuroPython, Dublin 2022), « VS Code and Python: A Natural Fit for Data Science », surVisual Studio Magazine,(consulté le) :« Tales of Python Security »

Voir aussi

[modifier |modifier le code]

Sur les autres projets Wikimedia :

Bibliographie

[modifier |modifier le code]

Liste des principaux frameworks

[modifier |modifier le code]
  1. Base de données
  2. Bibliothèques scientifiques
  3. Intelligence artificielle
  4. Outils
  5. Protocoles
  6. Traitement d'image
  7. Web

Articles connexes

[modifier |modifier le code]
v ·m
Implémentation
Framework
IDE
Organisations
Autres
v ·m
Concurrents
Déclaratifs
Fonctionnels
Impératifs
Orientés objet
v ·m
Compilés
Interprété
Les deux
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Python_(langage)&oldid=233385662 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2026 Movatter.jp