web-dev-qa-db-fra.com

Quand utiliser% r au lieu de% s en Python?

Sur Learn Python the Hard Way page 21, je vois cet exemple de code:

x = "There are %d types of people." % 10
...
print "I said: %r." % x

Pourquoi %r est-il utilisé ici au lieu de %s? Quand utiliseriez-vous %r, et quand utiliseriez-vous %s?

157
coffee-grinder

Le spécificateur %s convertit l'objet à l'aide de str() , et %r le convertit à l'aide de repr() .

Pour certains objets tels que des entiers, ils donnent le même résultat, mais repr() est spécial en ce sens que (pour les types où cela est possible), il retourne conventionnellement un résultat valide Python syntaxe , qui pourrait être utilisé pour recréer sans ambiguïté l’objet qu’il représente.

Voici un exemple, en utilisant une date:

>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
'2011-05-14'
>>> repr(d)
'datetime.date(2011, 5, 14)'

Les types pour lesquels repr() ne produit pas la syntaxe Python incluent ceux qui pointent vers des ressources externes telles que file, qu'il est impossible de garantir de recréer de manière différente. le contexte.

302
Ben James

Utilisez le %r pour le débogage, car il affiche les données "brutes" de la variable, mais les autres sont utilisées pour l'affichage aux utilisateurs.

C'est ainsi que fonctionne le formatage %r; il l’imprime comme vous l’avez écrit (ou presque). C'est le format "brut" pour le débogage. Ici \n utilisé pour afficher aux utilisateurs ne fonctionne pas. %r affiche la représentation des données brutes de la variable.

months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" % months

Sortie:

Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'

Vérifiez cet exemple dans Learn Python the Hard Way.

15
Pramod Bhat

%r montre avec guillemets:

Ce sera comme:

I said: 'There are 10 types of people.'.

Si vous aviez utilisé %s cela aurait été:

I said: There are 10 types of people..
15
manojlds

Voici une version de la réponse de Ben James ci-dessus:

>>> import datetime
>>> x = datetime.date.today()
>>> print x
2013-01-11
>>> 
>>> 
>>> print "Today's date is %s ..." % x
Today's date is 2013-01-11 ...
>>> 
>>> print "Today's date is %r ..." % x
Today's date is datetime.date(2013, 1, 11) ...
>>>

Lorsque j’ai exécuté cela, cela m’a aidé à voir l’utilité de% r.

14
macloo