Tout ce qui fait que Python 3 est meilleur que Python 2

Tweet
2
Like
Like
PostComment
←Augmentersonvolumedespermepourdessuperéjaculationsfaciales.
ToutcequifaitquePython3estmeilleur
quePython2  Recentlyupdated!
Thisentrywaspostedin Programmation andtagged python python2 python3 on26/01/2017bySam
AvecdenombreusesdistrosLinuxquiviennentavecPython3pardéfautainsiqueDjangoetPyramidquiannoncentbientôtneplus
supporterPython2,ilesttempsdefaireunpoint.
Python3estaujourd’huimajoritairementutilisépourtoutnouveauprojetouformationquej’aipurencontrer.Lesplusimportantes
dépendancesontétéportéesoupossèdentunealternative. Six et Python-future permettentd’écrirefacilementuncodecompatible
aveclesdeuxversionsdanslepiredescas.
Noussommesdoncbienarrivésàdestination.Ilrestequelquesbasesdecodeencorecoincées,lavieestinjuste,maisglobalementonest
enfinauboutdelamigration.Maisçaenamisdutemps!
Ilyadenombreusesraisonsquiontconduitàlalenteurdelamigrationdelacommunauté:
Python2estuntrèsbonlangage.Onneréparepascequimarche.
IlyabeaucoupdecodelegacyenPython2etçacoûtecherdemigrer.
LaPSFaététropgentilleaveclacommunautéetl’achouchoutée.EnJSetRubyilsontdit“migrezouallezvousfairefoutre”ettoutle
mondeamigrétrèsvite.
Maisjepensequelaraisonprincipalec’estlemanquedemotivationpourlefaire.Iln’yapasungrosstickerjaunefluod’untrucgenre
“gagnez30%deperfsenplus”quelesdevsadorentmêmesiçan’influencepastantleurviequeça.Maislescodeursnesontpas
rationnelscontrairementàcequ’ilsdisent.Ilsaimentlesone-liners,c’estpourdire.
Pourtant,ilyadestasdechosesexcellentesenPython3.Simplement:
Ellesnesontpassexy.
Ellesnesevoientpasinstantanément.
Personnen’enparle.
Après2ansdePython3quasi-fulltime,jepeuxvousledire,jeneveuxpluscoderenPython2.Etonvavoirpourquoi.
Unicode,monbelunicode
Onacriéquec’étaitlaraisonprincipale.Amonavisc’estuneerreur.Peudegenspeuventvraimentvoircequeçaimplique.
Maisentantqueformateur,voilàcequejen’aiplusaexpliquer:
Pourquoiunaccentdansuncommentairefaitplanterleprogramme.Et #coding:
Pourquoiilfautfaire fromcodecsimportopen etnonpasjuste open .
Pourquoi request.get().read()+'é' faitplanterleprogramme.Et encode() et decode() .
Pourquoi os.listdir()[0]+'é' faitafficherdestrucschelous.
Pourquoi print(sql_row[0]) faitplanterleprogrammeouaffichedestrucschelous.Oulesdeux.
Etjepeuxsupprimerdechacundemesfichiers:
Tousles uoulesfrom__future__/codecs
Lesen-têted’encoding.
Lamoitiédesencode /decode .
EttouteslesAPISontunparamètreencoding ,quiapourvaleurpardéfaut‘UTF8′.
Debuggageforthewin
Descentainesd’ajustementsontétéfaitspourfaciliterlagestiondeserreursetledebuggage.Meilleuresexceptions,plusdevérifications,
meilleursmessagesd’erreur,etc.
Quelquesexemples…
EnPython2:
>>>[1,2,3]<"abc"
True
EnPython3 TypeError:unorderabletypes:list()<str() ofcourse.
EnPython2, IOError pourtout:
>>>open('/etc/postgresql/9.5/main/pg_hba.conf')
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
IOError:[Errno13]Permissiondenied:'/etc/postgresql/9.5/main/pg_hba.conf'
>>>open('/etc/postgresql/9.5/main/')
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
IOError:[Errno21]Isadirectory:'/etc/postgresql/9.5/main/'
EnPython3,c'estbienplusfacileàgérerdansun try /except ouàdebugger:
>>>open('/etc/postgresql/9.5/main/pg_hba.conf')
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
PermissionError:[Errno13]Permissiondenied:'/etc/postgresql/9.5/main/pg_hba.conf'
>>>open('/etc/postgresql/9.5/main/')
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
IsADirectoryError:[Errno21]Isadirectory:'/etc/postgresql/9.5/main/'
Lescascadesd'exceptionsenPython3sonttrèsclaires:
>>>try:
...open('/')#Erreur,c'estundossier:
...exceptIOError:
...1/0#ouic'eststupide,c'estpourl'exemple
...
Traceback(mostrecentcalllast):
File"<stdin>",line2,in<module>
IsADirectoryError:[Errno21]Isadirectory:'/'
Duringhandlingoftheaboveexception,anotherexceptionoccurred:
File"<stdin>",line4,in<module>
ZeroDivisionError:divisionbyzero
LamêmechoseenPython2:
Traceback(mostrecentcalllast):
File"<stdin>",line4,in<module>
ZeroDivisionError:integerdivisionormodulobyzero
Bonnechancepourtrouverl'erreuroriginale.
Pleindeduplicationsontétéretirées.
EnPython2,undevdoitsavoirladifférenceentre:
range() et xrange()
map/filter et itertools.imap/itertools.ifilter
dict.items/keys/values , dict.iteritems/keys/values et dict.viewitems/keys/values
open et codecs.open
Et md5 vs hashlib.md5
getopt , optparse , argparse
Cettemanipulationdefichiersefaitavecsys , os ou shutil ?
Onhéritede UserDict ou dict ? UserList ou list ?
...
Souspeinedebugsoudetuersesperfs.
Certainsbugssontinévitables,etlesmodulescsv et re sontparexemplepourtoujoursbuggésenPython2.
Goodbyeboilerplate
FaireunprogrammecorrectenPython2requièreplusdecode.Prenonsl'exempled'unesuitedefichierquicontientdesvaleursà
récupérersurchaqueligne,oudescommentaires(avecpotentiellementdesaccents).Lesfichiersfontquelquescentainesdeméga,etje
veuxitérersurleurscontenus.
Python2:
#coding:utf8
from__future__importunicode_literals,division
importos
importsys
frommathimportlog
fromcodecsimportopen
fromglobimportglob
fromitertoolsimportimap#pournepascharger300Moenmémoired'uncoup
FS_ENCODING=sys.getfilesystemencoding()
SIZE_SUFFIXES=['bytes','KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']
deffile_size(size):
order=int(log(size,2)/10)ifsizeelse0#potentialbugwithlog2
size=size/(1<<(order*10))
return'{:.4g}{}'.format(size,suffixes[order])
defget_data(dir,*patterns,**kwargs):
"""Chargelesdonnéesdesfichiers"""
#keywordonlyargs
convert=kwargs.get('convert',int)
encoding=kwargs.get('encoding','utf8')
forpinpatterns:
forpathinglob(os.path.join(dir,p)):
ifos.path.isfile(path):
upath=path.decode(FS_ENCODING,error="replace")
print'Trouvé:',upath,file_size(os.stat(path).st_size)
withopen(path,encoding=encoding,error="ignore")asf:
#retirerlescommentaires
lines=(lforlinfif"#"notinl)
forvalueinimap(convert,f):
yieldvalue
C'estdéjàpasmal.OngèrelescaractèresnonASCIIdanslesfichiersetlenomdesfichiers,onaffichetoutproprementsurleterminal,on
itèreenlazypournepassaturerlaRAM...Uncodeassezchouette,etpourobtenircerésultatdansd'autreslangagesvousauriezplus
dégueu(ouplusbuggé).
Python3:
#wow,somuchspace,muchlessimport
frommathimportlog2#nonbuggylog2
frompathlibimportPath#plusdeos.pathbullshit
SIZE_SUFFIXES=['bytes','KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']
deffile_size(size):
order=int(log2(size)/10)ifsizeelse0
size=size/(1<<(order*10))
returnf'{size:.4g}{suffixes[order]}'#fstring
defget_data(dir,*patterns,convert=int,encoding="utf8"):#keywordonly
"""Chargelesdonnéesdesfichiers"""
forpinpatterns:
forpathinPath(dir).glob(p):
ifpath.is_file():
print('Trouvé:',path,file_size(path.stat().st_size))
withopen(path,encoding=encoding,error="ignore")asf:
#retirerlescommentaires
lines=(lforlinfif"#"notinl)
yieldfrommap(convert,lines)#déroulageautomatique
Oui,c'esttout.
Etcen'estpasjusteunequestiondetailleducode.Noteztoutcequevousn'avezpasàsavoiràl'avancepourqueçamarche.Lecodeest
pluslisible.Lasignaturedelafonctionmieuxdocumentée.EtilmarcheramieuxsuruneconsoleWindowscarlesupportaétéamélioréen
Python3.
Etencorej'aiétésympa,jen'aipasfaitlagestiondeserreursdelecturedesfichiers,sinononenavaitencorepour3ans.
Ilyadestasd'autrestrucs.
L'unpackinggénéralisé:
>>>a,*rest,c=range(10)#récupérerlapremièreetdernièrevaleur
>>>foo(*bar1,*bar2)#toutpasserenarg
>>>{**dico1,**dico2}#fusionnerdeuxdico:)
OulaPOOsimplifiée:
classFooFooFoo(object):
...
classBarBarBar(FooFooFoo):
defwololo(self):
returnsuper(BarBarBar,self).wololo()
Devient:
classFooFooFoo:
...
classBarBarBar(FooFooFoo):
defwololo(self):
returnsuper().wololo()
Python3esttoutsimplementplussimple,etplusexpressif.
Bonus
Evidementilyapleindetrucsquin'intéresserontqu'unecertainecatégoriededevs:
ipaddress.ip_address pourparserlesadressesIP.
asyncio pourfairedel'IOnonblocantesansthreads.
enum desenumdetoutessortes.
functools.lru_cache pourcacherlerésultatdesesfonctions.
typehintspourvérifierlavaliditédesoncode.
l'opérateur @pourmultiplierdesmatricesavec numpy .
concurrent.futures pourfairedespoolsnonblocantespropres.
statistics statsperformantesetcorrectes.
tracemalloc trouverlesfuitesdemémoire.
faulthandler gérerlescrashducodeCproprement.
Sivousn'êtespasconcernés,çan'estpasmotivant.Maissiçavoustouchepersonnellement,c'estsupercool.
Aupassage,depuisla3.6,Python3estenfinplusrapidequePython2pourlaplupartdesopérations:)
Pourfinir...
Toutesceschoseslàs'accumulent.Uncodepluscourt,pluslisible,plusfacileàdébugger,plusjuste,plusperformant.Paruntasdepetits
détails.
Alorsoui,lamigrationnevapasrestaurerinstantanémentvotreérectionetvousfaireperdredupoids.Maissurlelongterme,toutça
compteénormément.
Partager:
23thoughtson“ToutcequifaitquePython3est
meilleurquePython2
Leaveacomment
Youremailaddresswillnotbepublished.Requiredfieldsaremarked*
Name*
Email*
Website
Comment
YoumayusetheseHTMLtagsandattributes: <ahref=""title=""><abbrtitle=""><acronymtitle=""><b><blockquotecite="">
<cite><code><pre><deldatetime=""><em><i><qcite=""><strike><strong>
Notifymeoffollow-upcommentsbyemail.
Notifymeofnewpostsbyemail.
DesquestionsPythonsansrapportavecl'article?Posez-lessurIndexError.
Horsdublog
Pagedecontact
@sam_et_maxsurtwitter
NostweetsenRSS
Forkme,I’mfamous(github)
Touslestextesdeceblog,saufsignalementcontraire,sont
souslicencecreativecommon3.0unported.Toiaussi,trouveunarticle
obsolètesurnotreblog
January2017(4)
October2016(2)
September2016(5)
August2016(2)
March2016(8)
February2016(9)
January2016(16)
December2015(6)
November2015(7)
October2015(2)
September2015(6)
August2015(10)
July2015(18)
June2015(13)
May2015(12)
April2015(13)
March2015(8)
February2015(4)
January2015(21)
December2014(24)
November2014(6)
October2014(18)
September2014(10)
August2014(5)
July2014(11)
June2014(25)
May2014(14)
April2014(10)
March2014(23)
February2014(27)
January2014(17)
December2013(27)
November2013(25)
October2013(27)
September2013(1)
August2013(31)
July2013(32)
June2013(24)
May2013(30)
April2013(31)
March2013(33)
February2013(29)
January2013(34)
December2012(32)
November2012(36)
October2012(35)
September2012(36)
August2012(37)
July2012(33)
June2012(24)
May2012(31)
April2012(20)
Email More
desfrenes
26/01/2017at14:19
“DjangoetPyramidquiannoncentbientôtneplussupporterPython3″
c’estpaspython2plutôt?
Emmanuel
26/01/2017at14:21
Oooops:autoutdébutdel’article“quiannoncentbientôtneplussupporterPython3″—>c’est2;-)
SamPostauthor
26/01/2017at14:40
gordon
26/01/2017at15:09
Oui,maisPython3c’estpasTuringComplïte©!
DavidChanial
26/01/2017at15:10
DjangoannonceneplussupporterPython3?Ou2?;)
asshole
26/01/2017at15:11
ToutcequifaitquejesuispassédirectementdePython2àGo:
gestiondelaconcurrenceintégréedanslelanguage,
distributiondeprogrammesfacile,
rapiditédecompilationetd’execution,
vérificationdeformatagepardéfaut,
gestiondestestspardéfaut,
gestiondeladocpardéfaut.
J’enpouvaisplusdepasser3heuresàéplucher12docsdifférentesquisecontredisentpourdistribuerun
programme…
Jen’aimepasl’évolutionquePython3prend…
L’asynchronenemeconvaincpasdepuisquej’aigoûtéauxthreadslégersdeGo.
Bref,j’utilisetoujoursPythonpourdesscriptsd’adminrapidesàécriremaispluspourdesprojetsentiers…
Pourtantilyaavaitl’exempledePerl…Onnecassepasunecommunautésinonc’estlafin…etj’aipasquecela
àbranlerderéecriremesprogsd’ilya10ansetd’alleràlapêcheauxmodulesvoirs’ilssontv2ouv3…maisje
vousrassure,jetrouvequ’ilyapire:leJavascript;)
SamPostauthor
26/01/2017at15:14
@gordon:
Ouic’estunedesraisonspourlesquellesjenerecommandepassonlivre.Sicertainspointssontintéressant,il
yabeaucoupdemauvaisefoi.Particulièrement,Python3estimmensémentmeilleurpourlesdébutants.C’est
justementundespointsprincipauxd’attraction.Direlecontraireestsoitunmensonge,soitdel’incompétence.
@david:ouaij’aibu
blackmoor
26/01/2017at15:18
Typos:
–“EttouteslesAPISontunparamètresencoding”–>“unparamètre”
–“Descentainesd’ajustementsonétéfait”–>“ontété”
–“Lesfichiersfontquelquescentainesdeméga,etjeuxveuxitérersurleurscontenus.”–>“etjeveux”
–“Etencorej’aiétésympas”–>“sympa
–“lamigrationnevapasréstaurerinstantannémentvotreerectionetvousfaireperdredupoids”–>restaurer
instantanémentvotreérection
Est-ceunetypo?“EnPythonundevdoitsavoirladifférenceentre:”–>“EnPython2″
HS:Quitteàposterunmessage,ungrandmerciàtoiSampourtoutcesarticlessuperintéressant(merciaussi
àMax,maisj’ail’impressiondenepasleliresouvent)
Question:jenecodepasvraimentenpythonmêmesij’aiétéamenéàenfaireuntoutpetitpeu.N’est-cepas
gênantden’apprendrequepython3quandoncommence?Nedevrait-onpasd’abordgalérerunpeusurle2
histoiredemieuxcomprendre?
SamPostauthor
26/01/2017at15:19
@asshole:amoinsd’écrireunserveur,Gon’aquasimentaucunavantagesurPython.Analyserdesdonnées,
manipulerdutexte,fairedesscript,gérerdeserreurs,faireunsiteweb…Pythonesttoujoursplusfacileà
utiliserpourcela.Ouiladistributionestmeilleur,maisvuqu’onfaitrarementdesprogrammesavecGUIavecau
finalçan’apportepasgrandchose.Quitteàapprendreunlangagebasniveauetsefairechier,autantprendre
rust.
SamPostauthor
26/01/2017at15:22
@blackmoor:merci.Nonplusmaintenant,tupeuxoublierPython2.Caneservirapasassez.Siunjourpar
malchancetudoislireouporterunecodePython2,ilseratempsdet’ypencher,maisseulementàcemoment
là.CeciditjustelireuncodePython2estfacilesionconnaitPython3.Lelangagen’estpasfondamentalement
différent.
Splint'
26/01/2017at16:23
Cafaitplaisircesnouveauxposts!
JepartageclairementtonpointdevuesurPython3,surtoutdepuisl’arrivee3.5
Typosrepereesdanslafonction get_data del’exemplePython3
*uneparenthèseentropaprèsle glob(p)
* ifpath.isfile(): => ifpath.is_file():
* path.stat.st_size => path.stat().st_size
SamPostauthor
26/01/2017at16:30
Merci
Zesk06
26/01/2017at17:13
Maismoi,jebossesousCentOS6.5,etsousCentOS6.5c’estencorepython2.6pardéfaut…oui2.6
Onpeuts’ensortireninstallantlessoftwarecollectionsmaisducoupilfautenvoyer46commandesavantde
pouvoirtaperdupython3.
brefc’estpasgagné
beeftanen
26/01/2017at17:18
Nousonveutune2.8;)
entwanne
26/01/2017at17:37
ResteàcequelesdistributionsLinuxàlatraînefinissentparaccepterqu’aujourd’hui,python==python3…
beeftanen
26/01/2017at17:53
https://medium.com/@kevalpatel2106/why-should-you-learn-go-f607681fad65#.dpvwxez40
cocksucker
26/01/2017at17:54
@Sam
Avoue,tuvoulaisjustevérifierqu’onavaitbientousmigréversPython3?;),uneformed’auditinformelen
modeshadow;)
SamPostauthor
26/01/2017at17:57
@Zesk06:ouaicommejeledisais,lemonteestinjuste.
Mespalliatifssont:
Pythonz(4commandespourinstallerPython2.6https://github.com/saghul/pythonz).
nuikta.J’aiPython2.6+headers+nuiktasurmamachineetjefaisnuitka–standalone–python-
version=2.6mon_script.pyetçamesortunmon_script.dist/mon_script.exestandalonequimarchesur
touslesvieuxserveurssansrieninstaller.Maisledossierfait20Mopourunhelloworld:)
Abject
26/01/2017at18:47
Heysuper!!!DenoveauxarticlessurSam&Maxveneztous!!!!!!!!!!!!!!
Enfinunpointexhaustif(oupresque)desdifférences(oserais-jediredesavantages)depython3parrapportà
Python2…
BenmoijedoisfairedescodePython3surCentOS7maisj’aipaslapossibilitéd’avoirtoutesleslibdispos
pourPython3…–>onfaitdubackportdeslibPython3versPython2pourqu’aufinalonpuissefairedu
Python3…
Vivement2020etlafinofficielledePython2!!!!
fero14041
26/01/2017at19:16
Pu*ainlecon(c’estmoi),j’avaisdéfacél’articleavecunebalise“code”malfermée…Mesplusplatesexcusesà
tousleslecteursdepassage!
boblinux
26/01/2017at21:02
Mercipourl’article,sympa!
Réchèr
27/01/2017at20:11
Yep!
Sansoublierlesimportsrelatifsetabsolus,quiclarifientbienleschoses,etlefameux“1/2=0″quiadu
dérouterbonnombredenéophytes.
Sivousêtesunhomme,coderenpython3multipliepar1.5laquantitédespermelorsd’uneéjaculation.
Sivousêtesunefemme,ladensitédecorpusculedeKrausesurleclitorisestmultipliéepar1.5également.
Vivementlepython4!
Buffalo974
28/01/2017at20:31
UnarticlesurNuitkadeprevu?
Maisoùjesuistombé(e)là?
TéléchargercettepageenPDF
Souscrireànosconneries
Entrezvotreadressemailetvous
recevrezunenotificationàchaquenouvel
article.
Join926othersubscribers
EmailAddress
J'adhère,bondieu!
TagCloud
0binangularjsasyncioautobahnbashblog
cachecomprehension-listscrossbarcssculdict
djangodonencodinggithttpimport
ipythoniterablejavascriptjquerylinux
metamysqlnginxnsfwpippoo
pythonpython3redisrubyservershell
sshsublimetexttwistedubuntuunicodeunittests
unpackingvirtualenvwampyield
Envoyezdessioux
Onadooooorelesbitcoins:
19zAHPPuce4BAhsdy9KaFwVLurEJXMhMAn
Nosprojets
Multiboards–l’actugeekfrenune
page
0bin–lepastebinchiffré
Allthatcounts–compteurpourjeux
Djangoquicky–quickviewsfor
Django
VizHash.js–Hashvisuels
Codedesarticlesdublog
23
Sam&Max Ducode,ducul
Prog AdminSys Philo&culture Cul Cours&tutos Multiboards VeillePythonFr
QuestionsPython
March2012(10)
February2012(14)
·©2017Sam&Max·DesignedbyThemes&Co· Backtotop
1 / 2 100%

Tout ce qui fait que Python 3 est meilleur que Python 2

La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !