quelle est la signification de %r
dans la déclaration suivante?
print '%r' % (1)
Je pense avoir entendu parler de %s
, %d
et %f
mais je n'ai jamais entendu parler de cela.
Contexte:
En Python, il existe deux fonctions intégrées pour transformer un objet en chaîne: str
vs. repr
. str
est censé être une chaîne conviviale et lisible par l'homme. repr
est supposé inclure des informations détaillées sur le contenu d'un objet (parfois, ils renverront la même chose, par exemple pour des entiers). Par convention, s'il existe une expression Python qui sera évaluée à un autre objet ==, repr
renverra une telle expression, par exemple.
>>> print repr ('hi') 'hi' # remarquez les guillemets ici par opposition à ... >>> print str ('hi') hi
Si renvoyer une expression n'a pas de sens pour un objet, repr
devrait renvoyer une chaîne entourée de symboles <et>, par exemple. <blah>
.
Pour répondre à votre question initiale:
En outre:
Vous pouvez contrôler la manière dont une instance de vos propres classes convertit en chaînes en implémentant les méthodes __str__
et __repr__
.
class Foo:
def __init__(self, foo):
self.foo = foo
def __eq__(self, other):
"""Implements ==."""
return self.foo == other.foo
def __repr__(self):
# if you eval the return value of this function,
# you'll get another Foo instance that's == to self
return "Foo(%r)" % self.foo
Il appelle repr()
sur l'objet et insère la chaîne résultante.
Il imprime le remplacement sous forme de chaîne avec repr()
.
En ajoutant aux réponses données ci-dessus, '%r'
peut être utile dans un scénario où vous avez une liste avec un type de données hétérogène . Disons que nous avons un list = [1, 'Apple' , 2 , 'r','banana']
Évidemment, dans ce cas, utiliser '%d'
ou '%s'
provoquerait une erreur. Au lieu de cela, nous pouvons utiliser '%r'
pour imprimer toutes ces valeurs.
La différence entre %r
et %s
est la suivante: %r
appelle la méthode repr()
et %s
appelle la méthode str()
. Ces deux fonctions sont des fonctions Python intégrées.
La méthode repr()
renvoie une représentation imprimable de l'objet donné. La méthode str()
renvoie la représentation "informelle" ou joliment imprimable d'un objet donné.
En langage simple, la méthode str()
permet d’imprimer le résultat de la manière souhaitée par l’utilisateur final:
name = "Adam"
str(name)
Out[1]: 'Adam'
La méthode repr()
permet d’imprimer ou de montrer à quoi ressemble réellement un objet:
name = "Adam"
repr(name)
Out[1]: "'Adam'"
%s <=> str
%r <=> repr
%r
appelle repr()
sur l'objet et insère la chaîne résultante renvoyée par __repr__
.
La chaîne renvoyée par __repr__
doit être non ambiguë et, si possible, correspondre au code source nécessaire pour recréer l'objet représenté.
Un exemple rapide:
class Foo:
def __init__(self, foo):
self.foo = foo
def __repr__(self):
return 'Foo(%r)' % self.foo
def __str__(self):
return self.foo
test = Foo('Text')
Alors,
in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'
Voir Opérations de formatage de chaîne dans les documents. Notez que% s et% d etc. pourraient ne pas fonctionner comme vous le souhaitez si vous êtes habitué à la façon dont ils travaillent dans une autre langue telle que C.
En particulier,% s fonctionne également bien pour les ints et les floats, sauf si vous avez des exigences de formatage particulières où% d ou% f vous donnera plus de contrôle.