% ou format() en Python ?
On a réçu un mail du genre :
Salut les mecs!
Je me demandais si il valait mieux utiliser format() ou % quand on veut insérer une variable dans une chaîne?
Je comprend pas vraiment quelle est la différence entre les deux…l’un est-il plus rapide? Plus fiable?Merci les mecs!
Donc je suppose que d’autres personnes se posent la même question, du coup je poste ça là une bonne fois pour toute.
En résumé :
%
c’est la manière de faire de Python 2, format()
, c’est du Python 3. Mais format()
a été backporté en Python 2.6.
Du coup, utilisez toujours format()
, ça facilite le portage du code et ça donne de bonnes habitudes. Les mecs comme moi ont encore du mal (je me force) et parfois laissent échapper un %
par réflexe, surtout que c’est plus court à taper et qu’on est des fainéants. D’ailleurs les anciens articles du blogs le montrent. C’est pas une excuse. format()
pour tout le monde, et que ça saute !
No related posts.
Pardon, c’est pas très lisible:
Une autre raison que “c’est comme ça qu’il faut faire” ?
%
marche aussi en python 3Accessoirement certaines syntaxes syntaxe de .format() sont valides en python 3, mais pas en python 2.6
Exemple :
Les 2 ne sont pas plutôt complémentaires sur python 3?
D’ailleurs :
print('yes %s can!' % 'we')
marche très bien sur la 3.3!
Wow, 10 ans de Python et je viens d’apprendre que “%” est conservé en Python 3. J’étais persuadé qu’il était deprecated.
Bon, ça vallait le coup de faire l’article rien que pour ça.
Merci de m’apprendre des trucs tous les jours. Et merci de le faire aussi gentiment.
Oh le mauvais !!! *lapidation*
Par contre je viens d’apprendre de @Romuald que 2.6 ne supportait pas toutes les syntaxes … Content d’avoir toujours utilisé % pour les simples remplacements :)
J’ai cru lire que
%
était un chouilla plus rapide, ne serait-ce que parce qu’il a moins de fonctionnalités.Mais
%
c’est l’héritage des langages C-like, alors que.format()
c’est plus pythonesque. (mais je suis moi aussi une grosse feignasse, à vrai dire)Je ne dis pas que format() n’est pas utile mais perso je n’en ai pas encore eu l’utilité et le % me convient très bien. Clair, rapide à taper et facile à relire et en plus conservé en Python3.
Pourquoi alors se compliquer la vie…?
Mais alors, comment utiliser format si on a un {} dans la chaine à manipuler?
Exemple:
In [20]: "Je veux inserer [0] dans une chaine contenant {zobi=lamouche}".format("ceci")
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
in ()
----> 1 "Je veux inserer [0] dans une chaine contenant {zobi=lamouche}".format("ceci")
KeyError: 'zobi=lamouche'
Terrible!!!
Merci!
format, c’est quand même bien quand dans une substitution, on veut utiliser plusieurs fois un terme
In [2]: print('{0} {0} {0}'.format('bon'))
bon bon bon
C’est aussi mieux pour les variables nommées. %(nom)s c’est plus chiant à tapper que {nom}
Juste une coquille (deux corrections):
feinénants -> fainéants
Salut,
Le “old %-formatting” est déprécié depuis 2.6.
http://docs.python.org/library/stdtypes.html#str.format
C’est ce que je croyais aussi, mais en fait il est toujours là dans les dernières versions de Python 3.