Python (langage)

Python(prononcé/pi.tɔ̃/) est unlangage de programmationinterprété,multiparadigmeetmultiplateformes. Il favorise laprogrammation impérativestructurée,fonctionnelleetorientée objet. Il est doté d'untypage dynamiquefort, d'une gestion automatique de lamémoireparramasse-mietteset d'unsystème de gestion d'exceptions; il est ainsi similaire àPerl,Ruby,Scheme,SmalltalketTcl.
Le langage Python est placé sous unelicence libreproche de lalicence BSDet fonctionne sur la plupart desplateformes informatiques, dessmartphonesauxordinateurs centraux, deWindowsàUnixavec notammentGNU/Linuxen passant parmacOS, ou encoreAndroid,iOS, et peut aussi être traduit enJavaou.NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils dehaut niveauet unesyntaxesimple à utiliser.
Il est également apprécié par certainspédagoguesqui y trouvent unlangageoù la syntaxe, clairement séparée des mécanismes debas niveau, permet uneinitiationaisée aux concepts de base de la programmation. Selon l'Index TIOBE, notamment en raison de son efficacité pour l'apprentissage automatique, sa popularité va croissante ; et en 2022 n'a toujours pas montré de signe de ralentissement.
Python est unlangage de programmationqui peut s'utiliser dans de nombreux contextes et s'adapter à tout type d'utilisation grâce à desbibliothèquesspécialisées.
Il est cependant particulièrement utilisé commelangage de scriptpourautomatiserdes tâches simples mais fastidieuses, comme unscriptqui récupérerait la météo surInternetou qui s'intégrerait dans un logiciel deconception assistée par ordinateurafin d'automatiser certains enchaînements d'actions répétitives (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 langage de plus bas niveau. Il est particulièrement répandu dans le mondescientifique, et possède de nombreusesbibliothèquesoptimisées destinées aucalcul numérique.
C'est l'un des langages les plus utilisés dans le domaine de l'informatique quantiqueet de l'intelligence artificielle, ainsi que pour le traitement desBig Dataet duMachine learningRetrait des sources lebigdata.fr : plagiat ; pas de transparenceProjet:Sources/Enquête_genAI_:_analyse_détaillée#lebigdata.fr.
À la fin desannées 1980, leprogrammeurGuido van Rossumparticipe au développement du langage de programmationABCauCentrum voor Wiskunde en Informatica(CWI) d'Amsterdam, auxPays-Bas. Il travaille alors dans l'équipe dusystème d'exploitationAmoebadont lesappels systèmessont difficilement interfaçables avec leBourne shellutilisé commeinterface utilisateur. Il estime alors qu'un langage de script inspiré d'ABC pourrait être intéressant commeinterpréteur de commandespour Amoeba.
En1989, profitant d'une semaine de vacances durant les fêtes deNoël, il utilise sonordinateur personnelpour é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. Il s'est principalement inspiré d'ABC, par exemple pour l'indentation comme syntaxeou les types de haut niveau mais aussi deModula-3pour lagestion des exceptions, dulangage Cet desoutils UNIX.
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. Enfévrier 1991, la première version publique, numérotée 0.9.0, est postée sur le forumUsenetalt.sources. La dernière version sortie au CWI est Python 1.2.
En1995, Van Rossum continue son travail sur Python auCNRI(en)àReston, auxÉtats-Unis, où il sort plusieurs versions du logiciel.
À partir d'août1995, l'équipe Python travaille au CNRI surGrailunnavigateur webutilisantTk. Il est l'équivalent pour Python du navigateurHotJava, permettant d'exécuter desappletsdans un environnement sécurisé. La première version publique, disponible en novembre, est la 0.2. Il entraîne le développement demodulespour la bibliothèque standard commerexec,htmllibouurllib. La version 0.6 sera la dernière deGrail; elle est publiée enavril 1999.
En1999, le projetComputer Programming for Everybody(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éveloppementIDLE. Cependant, 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 s'éteint en 2000. Python 1.6 est la dernière version sortie au CNRI.
En2000, l'équipe principale de développement de Python déménage àBeOpen.compour former l'équipePythonLabsde BeOpen. Python 2.0 est la seule version sortie à BeOpen.com. 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).
Andrew M. Kuchling publie endécembre 1999un texte nomméPython Warts, 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.
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 lucratiffondée en 2001, modelée d'après l'Apache Software Foundation.
Afin de réparer certains défauts du langage (par exemple l'orienté objetavec deux types declasses), et pour nettoyer la bibliothèque standard de ses éléments obsolètes et redondants, Python a choisi de casser la compatibilité ascendante dans la nouvelle version majeure, Python 3.0, publié endécembre 2008. Cette version est rapidement suivie par une version 3.1 qui corrige les erreurs de jeunesse de la version 3.0.
Selon l'Index TIOBE,« Python, qui est devenu un élément incontournable de lascience des données, duDevOpset 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 ».
Python a été conçu pour être un langage lisible. Il vise à être visuellement épuré. Par exemple, il possède moins de constructionssyntaxiquesque de nombreux langages structurés tels queC,Perl, ouPascal. Les commentaires sont indiqués par le caractèrecroisillon(#).
Lesblocssont identifiés par l'indentation, au lieu d'accolades comme enCouC++; ou debegin ... endcomme enPascalouRuby. Une augmentation de l'indentationmarque le début d'un bloc, et une réduction de l'indentation marque la fin du bloc courant. Par convention (actuellement PEP8), l'indentation est habituellement de quatre espaces en Python.
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. 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 :
Les mots-clés réservés du langage Python sont fournis dans la listekeyword.kwlistdu modulekeyword.
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,printetexecne sont plus des mots-clés du langage, mais des fonctions du modulebuiltins. Sont ajoutés aux mots-clés :True,False,Noneetnonlocal. 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).nonlocala été introduit par le PEP 3104, 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.
Les types de base en Python sont relativement complets et puissants. Il y a, entre autres :
Les objets itérables sont parcourus à l'aide d'une boucleforde la manière suivante :
Pour une chaîne de caractères, l'itération procède caractère par caractère.
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.
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, desdictionnairesou desensembles. Par exemple, pour construire la liste des carrés desentiers naturelsplus petits que 10, on peut utiliser l'expression :
La liste des nombrespairs:
Une table de passage des lettres de l'alphabet vers leur codeASCII:
L'ensemble des lettres d'un mot (produit l'ensemble{'r', 'c', 'd', 'b', 'a'}) :
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'instructionsforetif:
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 anonymeest possible :
Les fonctions lambda peuvent être définies en ligne et utilisées comme arguments dans des expressions fonctionnelles :
retournera une liste constituée des éléments de une_liste inférieurs à 5. Le même résultat peut être obtenu avec
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 avecdefpeut être créée à l'intérieur d'une autre fonction et on obtient ainsi une définition de fonction dans une variable locale, par exemple :
Une fonction locale peut modifier l'environnement de la fonction qui l'a créée, grâce au mot-clénonlocal(voirFermeture (informatique)) :
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__.
Tous les types de base, les fonctions, lesinstancesde 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. LesclassesPython 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 :
Exemple de deux classes simples :
Python fournit un mécanisme élégant etorienté objetpour 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.
Par exemple on peut définir l'addition de deux vecteurs à deux dimensions avec la classe suivante :
Le mot-clefyieldutilisé 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 :
Le moduleitertoolspermet de manipuler les générateurs. Par exemple, pour extraire les 10 premiers éléments du générateur précédent :
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 380et 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.
Un générateur peut sembler identique à une fonction qui retourne une liste, mais contrairement à une liste qui contienttousses éléments, un générateur calcule ses élémentsun par un.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 * npar un appel de fonction réalisant uneffet de bord, par exemple un affichage à l'écran.
Grâce à un usage intensif des dictionnaires (conteneurassociatif développé avec destables de hachage), Python permet d'explorer les divers objets du langage (introspection) et dans certains cas de les modifier (intercession).
Letypagen'est pas vérifié à la compilation. Python utilise leduck typing: lors de l'exécution, si une méthode invoquée sur un objet a la mêmesignaturequ'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. Malgré l'absence de typage statique, Python est fortement typé, interdisant des opérations ayant peu de sens (par exemple, additionner un nombre à une chaîne de caractères) au lieu de tenter silencieusement de la convertir en une forme qui a du sens. Python propose des fonctions permettant de transformer les variables dans un autre type :
Python propose aussi un mécanisme detypage statiquepour les attributs des classes grâce à l'APItraitou aupatron de conceptiondecorators.
Depuis la version 3.0, Python propose l'annotation des variables dans les fonctions (introduit dans la PEP 3107). 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.
En complément, depuis la version 3.5, Python propose le module typing(introduit dans la PEP 484).
Il est possible d'effectuer une analyse statique des modules Python avec des outils comme Pylint, mypy, 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__.
Il est aussi possible de générer un code intermédiaire (bytecode) Python.
Des outils comme PyInstallerou d'autres plus spécifiques comme cx_Freeze sousUnix,WindowsetmacOS, py2appsousmacOSetpy2exesousWindowspermettent de « compiler » un programme Python sous forme d'un exécutable comprenant le programme et un interpréteur Python.
Le programme ne tourne pas plus rapidement (il n'est pas compilé sous forme de code machine) mais cela simplifie largement sa distribution, notamment sur des machines où l'interpréteur Python n'est pas installé.
En Python,tout est objet, dans le sens qu'une variable peut contenir uneréférencevers 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.
Le modèle objet de Python est inspiré de celui de Modula-3. 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 duselfexplicite 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.
Python reconnaît trois types de méthodes :
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 commeprotectedouprivate.
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 modulebastionde 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(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'accesseurset le masquage des données comme il est courant de le faire en C++ par exemple.
Python supporte l'héritage multiple. Depuis la version 2.3, il utilise l'algorithme C3, issu du langageDylan, pour résoudre l'ordre de résolution de méthode(MRO). Les versions précédentes utilisaient unalgorithme de parcours en profondeurqui posait des problèmes dans le cas d'unhéritage en diamant.
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 queMIMEetHTTP). Des modules pour créer desinterfaces graphiqueset manipuler desexpressions rationnellessont également fournis. Python inclut également unframeworkdetests unitaires(unittest, anciennementPyUnitavant version 2.1) pour créer des suites de tests exhaustives.
Bien que chaque programmeur puisse adopter ses propres conventions pour l'écriture de code Python,Guido van Rossuma mis un guide à disposition, référencé comme « PEP 8 ». Publié en 2001, il est toujours maintenu pour l'adapter aux évolutions du langage.Googlepropose également un guide.
Python possède plusieurs modules disponibles pour la création de logiciels avec uneinterface graphique. Le plus répandu estTkinter. 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'exploitationutilisé, 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 sontTkinteret Pmw (Python megawidgets)pourTk,wxPythonpourwxWidgets,PyGTKpourGTK,PyQtetPySidepourQt, et enfin FxPy pour leFOX Toolkit. Il existe aussi une adaptation de la bibliothèqueSDL:Pygame, unbindingde laSFML: PySFML, ainsi qu'une bibliothèque écrite spécialement pour Python :Pyglet(en).
Il est aussi possible de créer des applicationsSilverlighten Python sur la plateformeIronPython.
Guido van Rossumest 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). Cependant, enjuillet 2018, Guido van Rossum a annoncé sa retraite de ce rôle, se déclarant en « vacances permanentes » de ses responsabilités de BDFL. Par la suite, ennovembre 2019, il a également retiré sa candidature au conseil directeur du langage Python.
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 directeurcomposé 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 diffusionpython-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 versGitHuben 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 commeRedditouDiscord.
Les références aux Monty Python, une troupe comique britannique, sont un élément récurrent dans la culture Python. Les tutoriels du langage utilisent souvent les termesspameteggscommevariable métasyntaxique, en référence au célèbre sketchSpamdesMonty Python, où le SPAM (un jambon en conserve) est omniprésent dans le menu. Ce sketch a d'ailleurs donné son nom au phénomène ducourriel non sollicité, illustrant l'humour décalé et omniprésent dans la communauté Python.
Plusieurs entreprises ou organismes mentionnent sur leur site officielqu'ils utilisent Python :
Python est aussi le langage de commande d'un grand nombre de logiciels libres :
Et commerciaux :
Python est utilisé comme langage de programmation dans l'enseignement secondaire et supérieur, notamment en France. Depuis 2013, il y est enseigné à tous les étudiants declasses préparatoires scientifiquesdans le cadre du tronc commun (informatique commune). Auparavant, l'enseignement d'informatique était limité à une option en MP, l'enseignement se faisant en langageCamlouPascal. Cette option existe toujours, mais Pascal a été abandonné à partir de la session 2015 des concours et Caml a, lui, été enlevé au profit deOCamldans cet enseignement. Les premières épreuves de concours portant sur le langage Python sont également celles de la session 2015.
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:
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.
Différentes distributions sont disponibles, qui incluent parfois beaucoup depaquetsdédiés à un domaine donné:
Ce ne sont pas desimplémentationsdifférentes du langage Python : elles sont basées sur CPython, mais sont livrées avec un certain nombre de bibliothèques préinstallées.
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. 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 pour son guide sur le style de 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 le31 août 2007, et il existe un PEPqui détaille les changements prévus, ainsi qu'une page pour orienter les programmeurs dans leur choix de Python 2 ou 3.
Les calculatrices destinées aux lycéens (dontCasio,NumWorks,Texas Instruments…) et supportant Pythonfonctionnent en Python 3. Ces calculatrices peuvent échanger des programmes avec desordinateurs personnels.
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 optimaleetnaturelle 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 sonprintnécessite l'emploi de parenthèses contrairement à Python 2.
Python 3.0a1, la première version alpha de Python 3.0, fut publiée le31 août 2007. 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 3000contient 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 transitionparfaitede Python 2.x vers Python 3.0 très délicat. 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. 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 letraduirepour la plateforme 3.x en utilisant 2to3.
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.
Il existe des versions de Python adaptées pourAndroidetiPhoneen version 2.5 ou 2.6. Disponible enJailbreak d'iOSsuriOSgrâce à "setup tools", et sur Android grâce àSL4Aqui donne même une possibilité de faire des petitesinterfaces graphiquesgrâce au module "android" et qui permet d'envoyer desSMS, d'allumer la caméra, ou encore de faire vibrer le téléphone. Les quelques lignes suivantes montrent comment faire ça :
Un portage de Python sur les terminauxBlackberryest sorti enjuin 2012, pour le systèmeBlackBerry OS10. Une version allégée est sortie enseptembre 2012, appelée « BlackBerry-Tart », en raison d'un jeu de mots en anglais : «a "tart" is lighter-weight than a "pie"», en référence à la traditionnelle «apple pie». Elle est basée sur Python 3.2.2.