touslesélémentsmanipulésparlelangage:nombres,méthodes,modules,etc. .
Néanmoins,avantlaversion2.2,lesclassesetlesinstancesdeclassesétaientuntype
d'objetparticulier,cequisignifiaitqu'ilétaitparexempleimpossiblededériversa
propresous-classedel'objetlist.
Méthodes
LemodèleobjetdePythonestinspirédeceluideModula-3 .Parmicesempruntsse
trouvel'obligationdedéclarerl'instancedel'objetcourant,conventionnellement
nomméeself,commepremierargumentdesméthodes,etàchaquefoisquel'on
souhaiteaccéderàunedonnéedecetteinstancedanslecorpsdecetteméthode.
Cettepratiquen'estpasnaturellepourdesprogrammeursvenantparexempledeC++
ouJava,laprofusiondesselfétantsouventcritiquéecommeétantunepollution
visuellequigènelalectureducode.Lespromoteursduselfexpliciteestimentau
contrairequ'ilévitelerecoursàdesconventionsdenommagepourlesdonnées
membresetqu'ilsimplifiedestâchescommel'appelàuneméthodedelasuperclasse
oularésolutiond'homonymieentredonnéesmembres .
Pythonreconnaîttroistypesdeméthodes:
lesméthodesd'instances,quisontcellesdéfiniespardéfaut.Ellesreçoiventcomme
premierargumentuneinstancedelaclasseoùellesontétédéfinies.
lesméthodesdeclasses,quireçoiventcommepremierargumentlaclasseoùellesont
étédéfinies.Ellespeuventêtreappeléesdepuisuneinstanceoudirectementdepuis
laclasse.Ellespermettentdedéfinirdesconstructeursalternatifscommelaméthode
fromkeys()del'objetdict.
lesméthodesstatiques,quinereçoiventpasdepremierargumentimplicite.Elles
sontsimilairesauxméthodesstatiquesquel'ontrouveenJavaouC++.
Visibilité
Lelangageaunsupporttrèslimitédel'encapsulation.Iln'yapas,commeenjavapar
exemple,decontrôledel'accessibilitépardesmotsclefscommeprotectedouprivate.
LaphilosophiedePythonestdedifférencierconceptuellementl'encapsulationdu
masquaged'information.Lemasquaged'informationviseàprévenirlesutilisations
frauduleuses,c'estunepréoccupationdesécuritéinformatique.Lemodulebastionde
labibliothèquestandard,quin'estplusmaintenudanslesdernièresversionsdu
langage,permettaitainsidecontrôlerl'accèsauxattributsd'unobjetdanslecadre
d'unenvironnementd'exécutionrestreint.
L'encapsulationestuneproblématiquededéveloppementlogiciel.Leslogandes
développeursPythonestwe'reallconsentingadultshere (noussommesentreadultes
consentants).Ilsestimenteneffetqu'ilsuffitd'indiquer,pardesconventions
d'écriture,lespartiespubliquesdesinterfacesetquec'estauxutilisateursdesobjets
deseconformeràcesconventionsoudeprendreleursresponsabilités.L'usageestde
préfixerparununderscorelesmembresprivés.Lelangagepermetparailleurs
d'utiliserundoubleunderscorepouréviterlescollisionsdenoms,enpréfixant
automatiquementlenomdeladonnéeparceluidelaclasseoùelleestdéfinie.
L'utilisationdelafonctionproperty()permetdedéfinirdespropriétésquiontpourbut
d'intercepter,àl'aidedeméthodes,lesaccèsàunedonnéemembre.Celarendinutile
ladéfinitionsystématiqued'accesseursetlemasquagedesdonnéescommeilest
courantdelefaireenC++parexemple.
Héritage
Pythonsupportel'héritagemultiple.Depuislaversion2.3,ilutilisel'algorithmeC3(en),
issudulangageDylan ,pourrésoudrel'ordrederésolutiondeméthode(MRO).Les
versionsprécédentesutilisaientunalgorithmedeparcoursenprofondeurquiposait
desproblèmesdanslecasd'unhéritageendiamant .
Bibliothèquestandard
Pythonpossèdeunegrandebibliothèquestandard,
fournissantdesoutilsconvenantàdenombreuses
tâchesdiverses.Lenombredemodulesdela
bibliothèquestandardpeutêtreaugmentéavecdes
modulesspécifiquesécritsenCouenPython.
Labibliothèquestandardestparticulièrementbien
conçuepourécriredesapplicationsutilisantInternet,
avecungrandnombredeformatsetdeprotocoles
standardsgérés(telsqueMIMEetHTTP).Des
modulespourcréerdesinterfacesgraphiquesetmanipulerdesexpressions
rationnellessontégalementfournis.Pythoninclutégalementunframeworkdetests
unitaires(unittest,anciennementPyUnitavantversion2.1)pourcréerdessuitesde
testsexhaustives.
Conventionsdestyle
Bienquechaqueprogrammeurpuisseadoptersespropresconventionspourl'écriture
decodePython,GuidovanRossumamisunguideàdisposition,référencécomme
«PEP8» .Publiéen2001,ilesttoujoursmaintenuen2013,pourl'adapteraux
évolutionsdulangage.Googleproposeégalementunguide .
Interfacesgraphiques
Pythonpossèdeplusieursmodulesdisponiblespourlacréationdelogicielsavecune
interfacegraphique.LeplusrépanduestTkinter.Cemoduleconvientàbeaucoup
d'applicationsetpeutêtreconsidérécommesuffisantdanslaplupartdescas.
Néanmoins,d'autresmodulesontétécrééspourpouvoirlierPythonàd'autres
bibliothèqueslogicielles(«toolkit»),pourdavantagedefonctionnalités,pourune
meilleureintégrationaveclesystèmed'exploitationutilisé,ousimplementpourpouvoir
utiliserPythonavecsabibliothèquepréférée.Eneffet,certainsprogrammeurs
trouventl'utilisationdeTkinterpluspéniblequed'autresbibliothèques.Cesautres
modulesnefontpaspartiedelabibliothèquestandardetdoiventdoncêtreobtenus
séparément.
Lesprincipauxmodulesdonnantaccèsauxbibliothèquesd'interfacegraphiquesont
TkinteretPmw(Pythonmegawidgets) pourTk,wxPythonpourwxWidgets,PyGTK
pourGTK+,PyQtetPySidepourQt,etenfinFxPypourleFOXToolkit.Ilexisteaussi
uneadaptationdelabibliothèqueSDL:Pygame,unbindingdelaSFML:PySFML,ainsi
qu'unebibliothèqueécritespécialementpourPython:Pyglet(en).
IlestaussipossibledecréerdesapplicationsSilverlightenPythonsurlaplateforme
IronPython.
LacommunautéPython
GuidovanRossumestleprincipalauteurdePython,etsonrôlededécideurcentral
permanentdePythonestreconnuavechumourparletitrede«Dictateurbienveillant
àvie»(BenevolentDictatorforLife,BDFL).
Ilestassistéd'uneéquipedecoredevelopersquiontunaccèsenécritureaudépôtde
CPythonetquisecoordonnentsurlalistedediffusionpython-dev.Ilstravaillent
principalementsurlelangageetlabibliothèquedebase.Ilsreçoiventponctuellement
lescontributionsd'autresdéveloppeursPythonvialaplateformedegestiondebug
Roundup,quiaremplacéSourceForge.
Lesutilisateursoudéveloppeursdebibliothèquestiercesutilisentdiversesautres
ressources.LeprincipalmédiagénéralisteautourdePythonestleforumUsenet
anglaiscomp.lang.python.
LesallusionsauxMontyPythonsontassezfréquentes.Lesdidacticielsconsacrésà
Pythonutilisentsouventlesmotsspameteggscommevariablemétasyntaxique.Ils'agit
d'uneréférenceausketchSpamdesMontyPython,oùdeuxclientstententde
commanderunrepasàl'aided'unecartequicontientdujambonenconservede
marqueSPAMdanspratiquementtouslesplats.Cesketchaétéaussiprispour
référencepourdésigneruncourrielnonsollicité.
AdoptiondePython
Plusieursentreprisesmentionnentsurleursiteofficiel qu'ellesutilisentPython:
Google(GuidovanRossumatravailléauseindecetteentrepriseentre2005et2012
);
IndustrialLight&Magic;
laNASA;
etCCPGames,lescréateursdujeuvidéoEVEOnline.
Pythonestaussilelangagedecommanded'ungrandnombredelogicielslibres:
FreeCAD,logicieldeCAO3D
Blender,logicieldemodélisation3D
Inkscape,logicieldedessinvectoriel
OpenOfficeetLibreOffice,lesdeuxbranchesdedéveloppementd'unesuite
bureautiqueissuedeStarOffice
Portage,legestionnairedepaquetsdusystèmed'exploitationGentoo
ParaView,logicieldevisualisationdedonnéesnumériques
Kodi,unlecteurmultimédia
...etcommerciaux:
WingIDE,EnvironnementdeDéveloppmentIntégréspécialisésurPython,etécriten
Python
CorelPaintShopPro,logicieldetraitementd’imageetd'éditiongraphique
capella,logicieldenotationmusicale
Pythonestutilisécommelangagedeprogrammationdansl'enseignementélémentaire
etsupérieur .
Implémentationsdulangage
Outrelaversionderéférence,nomméeCPython(carécriteenlangageC),ilexiste
d'autressystèmesmettantenœuvrelelangagePython:
StacklessPython,uneversiondeCPythonn'utilisantpaslapiled'appeldulangageC;
Jython,uninterprètePythonpourmachinevirtuelleJava.Ilaaccèsauxbibliothèques
fourniesavecl'environnementdedéveloppementJava;
IronPython,uninterprète/compilateur(expérimental)pourplateforme.Net/Mono;
PyPyuninterprètePythonécritdansunsous-ensembledePythoncompilableversle
CouLLVM;
uncompilateur(expérimental)pourParrot,lamachinevirtuelledePerl6;
ShedSkin(en) ,uncompilateurd'unsous-ensembledePythonproduisantducodeen
C++;
UnladenSwallow(en) ,uneversiondeCPythonoptimiséeetbaséesurLLVM,
maintenantabandonnée(ladernièreversionremonteàoctobre2009);
Cesautresversionsnebénéficientpasforcémentdelatotalitédelabibliothèquede
fonctionsécritesenCpourlaversionderéférence.
Lesdistributions
Différentesdistributionssontdisponibles,quiincluentparfoisbeaucoupdepackages
dédiésàundomainedonné:
ActivePython
Python(x,y) :unedistributionPythonàl'usagedesscientifiquesbaséesurQtet
Eclipse
EnthoughtCanopy :uneautredistributionàusagescientifique
Anaconda :unetroisièmedistributionàusagescientifique
Pyzo :«Pythontothepeople»,destinéeàêtrefaciled'utilisation
Historiquedesversions
Version Datedesortie Nouveautés
1.5(.2) 13avril1999
Ajoutdumotcléassert
Possibilitéd'importerunehiérarchiedemodules
(importspam.ham.eggs)
Nouveaumodulerequiremplaceregex
Lesexceptionssontmaintenantdesclasses
Ajoutdel'option-Oquisupprimelesassertionset
informationsdelignedefichier
1.6 5septembre2000
Laméthodeappend()deslistesn'accepteplusqu'un
seulargument
Lerésultatdesfonctionsstr()etrepr()estmaintenant
beaucoupplussouventdifférent,exemple:str(1L)=='1'
etrepr(1L)=='1L'
Leschaînesdecaractèresontmaintenantdes
méthodes("abc".strip())
Lemodulereestcompatibleavecl'ancienmoteur,est
plusrapide,etaccepteleschaînesUnicode
Ajoutdumoduledistutils
Nouveauprototypedeff(*args,**kw)pourles
fonctions,avantilfallaitutiliserapply()
int()etlong()acceptentmaintenantunebaseen
secondargument
L'opérateurinpeutêtresurchagéavecuneméthode
__contains__()
2.0 16octobre2000
Changementmajeur:supportd'Unicode
Ajoutdescompréhensionsdeliste(List
Comprehensions)
Ajoutdesopérateursavecassignement(a+=b,a*=b,etc.)
Leschaînesstrontmaintenantdesméthodes
Nouveauramasse-miettesàcycles
Ajoutdesmodulesdistutils,xml.dom.minidometxml.sax
2.1 17avril2001
Créationdumodule__future__pourrendreles
transitionsplusdouces
Comparaisonsriches(méthodes__lt__,__le__...)
Frameworkd'avertissement
Ajoutdesmodulesinspect,pydoc,doctest,pyunit
Ajoutdesréférencesfaibles(weakreferences)
Lesfonctionspeuventavoirdesattributs
NestedScopes
Laversion2.0.1(juin2001)seralapremièreversion
compatibleGPL
2.2 21décembre2001
UnificationdeTypeetdeClass:onpeutmaintenant
hériterdestypesdebase
Ajoutdesitérateursetgénérateurs
Nouvelopérateura//bpourladivisionentière
2.3 29juillet2003
Ajoutdesfonctionsenumerate()etsum()
Letypeboolestmaintenantvraimentdistinctd'un
entier
Beaucoupd'améliorationsdusupportUnicode
2.4 30novembre2004
Ajoutdesdécorateursdefonction/méthode
(@decorateur)
Conversionautomatiqued'unentiercourtenentier
longsilerésultatd'uneopérationesttropgrand
Expressionsdegénérateurretournantlesrésultats
l'unaprèsl'autreetnonpassousformed'uneliste,
exemple:sum(xforxinxrange(10000))
Ajoutdesfonctionsreversed()etsorted()
Lafonctionsort()acceptelesmotscléscmp,keyet
reverse
Créationdumoduledecimaletdurouteur
2.5 19septembre2006
Ajoutdel'instructionwith
Ajoutdesméthodessend(),throw()etclose()aux
générateurs
Expressionconditionnelle(aiftestelseb)
Lesimportsdemodulepeuventêtrerelatifs
Ajoutdesméthodespartition()etrpartition()aux
chaînesstretunicode
Ajoutdesfonctionsany()etall()
Intégrationdesbibliothèquesctypes,ElementTree,
hashlib,sqlite3etwsgiref
2.6 1eroctobre2008
Nouvellesyntaxedeformatagedechaînesde
caractères
Classesdebasesabstraites
Décorateursdeclasses
ModulesJSON,multiprocessing,contextmanageret
fractions
AméliorationdelacompatibilitéavecPython3
2.7 3juillet2010
Syntaxepourlesensembleslittéraux:{1,2,3}aulieu
deset((1,2,3))
Compréhensiondedictionnaireetd'ensemble,
exemples:{i:i*2foriinrange(3)}(dictionnaire)et
{i*2foriinrange(3)}(ensemble)
Possibilitédespécifierplusieursgestionnairesde
contexteavecuneseuledéclarationwith
Réimplementationdelabibliothèqueio
(entrées/sorties)enCpouroffrirdemeilleures
performances.Cettebibliothèqueestnotammentutile
pouraccéderàunfichiertexteenUnicode.
DictionnairesordonnéscommedécritsdanslaPEP
372:fromcollectionsimportOrderedDict
Laméthodeformatgèrelanumérotationautomatique:
'{}{}!'.format('Hello','World')donne'HelloWorld'!
Leformatagedesnombresgèrelesséparateursde
milliers,exemple:'{:,}'.format(10800)donne'10,800'
Améliorationdeprécisionlorsdesconversionschaîne
versflottantetflottantverschaîne.Pourunflottant,
float(repr(x))donneratoujoursx.
Nouveaumoduleargparsepourparserlalignede
commande:versionamélioréedumoduleoptparse
Configurationbaséesurdesdictionnairespourle
modulelogging
Objetsmemoryview:vueenlectureseuleoulecture-
écritured'unobjetbinaire(APIsimilaireàcelledutype
bytes)
TypePyCapsulepourl'APIC(pourlesmodules
d'extension)
Lestypesintetlonggagnentuneméthode
bit_length():nombredebitsnécessairespour
représenterlavaleurabsoluedunombre
3.0 3décembre2008
Fusiondestypes'int'et'long'
LeschaînessontenUnicodepardéfaut,'bytes'
remplacel'ancientype'str'
Utilisedesitérateursplutôtquedeslisteslàoùc'est
approprié(ex:dict.keys())
a/bestlavraiedivisionpardéfaut
execetprintdeviennentdesfonctions
None,TrueetFalsedeviennentdesmotsclé
Lefichier__init__.pyn'estplusnécessairepourles
modulesPython
`x`etl'opérateur<>disparaissent
Denombreusesfonctionsdisparaissent:apply(),
buffer(),callable()...
reduce()disparaîtauprofitdesbouclesexplicites
VoirlaPEP3100(http://www.python.org/dev/peps/pep-
3100/)pourlesdétails
3.1 27juin2009
Ajoutd'untypededictionnaireordonné,
Optimisationsdiversesapportéesautype'int',
Nouvellesfonctionnalitésdumodule'unittest',
Moduled'entrées/sorties'io'renduplusrapide,
Intégrationdel'instruction«import»enpurPython
Nouvellesyntaxepourlesinstructions'with'
imbriquées.
3.2 20février2011
Ajoutdumoduleargparsepourleparsingdes
argumentspassésàunprogramme
Modificationdelagestiondesfichierscompilés.pyc
Ajoutdescertificats(protocoleHTTPS)
Améliorationdumodulepickle
Réintroductiondelafonctioncallable()(retiréeen3.0)
3.3 29septembre2012
Ajoutdelasyntaxe"yieldfrom"pourutiliserdessous-
générateurs
Lasyntaxeu'unicode'estdenouveauacceptée
Ajoutdumodulefaulthandlerpouraideràdébugger
lesproblèmesdebasniveau
SupportpourlacompressionLZMA
Ajoutd'unmodulepourlesMockdansunittest
Incorporationdesfonctionnalitésdumodulevirtualenv
aveclemodulevenv
Refontedelahiérarchiedeserreurssystème(I/O).
3.4 16mars2014
Développement
LesPEP
Lespropositionsd'améliorationdePython(ou«PEP»:PythonEnhancementProposal)
sontdesdocumentstextuelsquiontpourobjetd'êtrelavoied'améliorationdePython
etdeprécéderàtoutessesmodificationsultérieures.Unpepestuneproposition
d'orientationpourledéveloppement(processPEP),unepropositiontechnique
(StandardTrackPEP)ouunesimplerecommandation(InformationalPEP).
Àleursortie,lesPEPsontrelusetcommentésparleBDFL .
Python3000
UnenouvelleversiondePython,appeléePython3.0(leprojetétaitappelé«Python
3000»ou«Py3K»)abolitlacompatibilitédescendanteaveclasériedesversions2.x,
danslebutd'éliminerlesfaiblessesdulangage.Lalignedeconduiteduprojetétaitde
«réduirelaredondancedanslefonctionnementdePythonparlasuppressiondes
méthodesobsolètes».Python3.0a1,lapremièreversionalpha,aétépubliéele31août
2007 ,etilexisteunPEP quidétailleleschangementsprévus,ainsiqu'unepage
pourorienterlesprogrammeursdansleurchoixdePython2ou3 .
Philosophie
Python3.0aétédéveloppéaveclamêmephilosophiequedanssesversions
antérieures,donctouteréférenceàlaphilosophiedePythons'appliqueraaussibienà
laversion3.0.Commetoujours,Pythonaaccumulébeaucoupdenouvellesméthodes
quifontenfaitactederedondanceavecd'autrespréexistantes.Python3.0,en
recherchantlasuppressionducoderedondantetdesmodulessemblables,suitla
grandedirectivephilosophiquedePython«Ilnedevraitsubsisterqu'uneseule
méthode,quisoitàlafoisoptimaleetnaturellepourchaquechose».
Endépitdecela,Python3.0resteraunlangagemulti-paradigme.Lesprogrammeurs
aurontencorelechoixentrel'orientationobjet,laprogrammationstructurée,la
programmationfonctionnelleetd'autresparadigmes;endépitduchoixexistant,
Python3.0acependantpourbutd'êtreutilisédemanièreplusnaturellequedansles
versions2.x.
Planningetcompatibilité
Python3.0a1,lapremièreversionalphadePython3.0,aétépubliéele31août2007.
Lesversions2.xet3.xdePythonserontpubliéesenparallèlependantplusieurscycles
dedéveloppement,pendantlesquelslasériedes2.xsubsisteraprincipalementpourla
compatibilité,enincluantquelquescaractéristiquesimportéesdepuisPython3.x.Le
PEP3000 contientplusd'informationsàproposduprocessusdepublicationd'une
version.
CommePerl6,Python3.0romptlacompatibilitédescendante(rétro-compatibilité).
L'utilisationdecodeécritpourlesséries2.xn'estpasgarantieavecPython3.0.Ce
dernierapportedeschangementsfondamentaux,commelepassagegénéraliséà
l'Unicodepourleschaînesdecaractèresetunedistinctionforteentreleschaînesde
caractèreetlesobjets«bytes».Letypagedynamiqueassociéàcertainesméthodes
surlesobjetsdetypedictionnairefontqu'unetransitionparfaitedePython2.xvers
Python3.0esttrèsdifficile.Commetoujours,unoutilnommé«2to3»réaliselaplus
grandepartdutravaildetraductiondesversions2.xverslesversions3.x,en
indiquantleszonesdecodessujettesàcautionpardescommentairesspéciauxetdes
misesengarde.Deplus,danssapré-version,2to3sembleréussirfranchementà
réaliserunetraductioncorrecte .Danslecadred'unemigrationdePython2.xvers
Python3.x,lePEP3000recommandedeconserverlecodeoriginalcommebasedes
modificationsetdeletraduirepourlaplateforme3.xenutilisant2to3.
Python2.6devrafournirdescaractéristiquesdecompatibilitéascendante,aussibien
qu'unmode«miseengarde»quidevraitfaireprendreconsciencedesproblèmes
potentielsdetransitionpourlepassageàPython3.0 .
Pythonpoursmartphones
IlexistedesversionsdePythonadaptéespourAndroidetiPhoneenversion2.5ou2.6.
DisponibleenJailbreakd'iOSsuriOSgrâceà"setuptools",etsurAndroidgrâceàSL4A
quidonnemêmeunepossibilitédefairedespetitesinterfacesgraphiquesgrâceau
module"android"etquipermetd'envoyerdesSMS,d'allumerlacaméra ,ouencore
defairevibrerletéléphone.Lesquelqueslignessuivantesmontrentcommentfaireça: