quel est le sens de r% en python
Question
quel est le sens de %r
dans la déclaration suivante?
print '%r' % (1)
Je pense que je l'ai entendu parler de %s
, %d
et %f
mais jamais entendu parler.
La solution
Arrière-plan:
En Python, il y a deux fonctions intégrées pour transformer un objet en une chaîne: str
contre repr
. str
est censé être un match amical, une chaîne lisible par l'homme. repr
est censé inclure des informations détaillées sur le contenu d'un objet (parfois, ils retournent la même chose, comme pour les entiers). Par convention, s'il y a une expression Python qui eval à un autre objet qui est ==, repr
renvoie une telle expression par exemple.
>>> print repr('hi') 'hi' # notice the quotes here as opposed to... >>> print str('hi') hi
Si le retour d'une expression n'a pas de sens pour un objet, repr
doit retourner une chaîne qui est entouré par <blah>
.
Pour répondre à votre question initiale:
En plus:
Vous pouvez contrôler la façon dont une instance de vos propres classes à convertir les chaînes en mettant en place __repr__
méthodes.
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
Autres conseils
Il appelle repr()
sur l'objet et insère la chaîne résultante.
Il imprime le remplacement en tant que chaîne repr()
.
Ajout aux réponses données ci-dessus, '%r'
peut être utile dans un scénario où vous avez une liste avec le type de données hétérogènes.
Disons que nous avons un list = [1, 'apple' , 2 , 'r','banana']
Il est évident que dans ce cas, en utilisant '%d'
ou '%s'
provoquerait une erreur. , Nous pouvons plutôt utiliser '%r'
pour imprimer toutes ces valeurs.
La différence entre %r
et %s
est, %r
appelle la méthode repr()
et %s
appelle la méthode str()
. Ces deux éléments sont des fonctions intégrées Python.
La méthode de repr()
renvoie une représentation imprimable de l'objet donné.
La méthode de str()
renvoie la représentation « informel » ou bien imprimer d'un objet donné.
Dans un langage simple, ce que la méthode ne str()
est d'imprimer le résultat d'une manière que l'utilisateur final souhaite voir:
name = "Adam"
str(name)
Out[1]: 'Adam'
La méthode repr()
imprimerait ou montrer ce qu'un objet ressemble réellement:
name = "Adam"
repr(name)
Out[1]: "'Adam'"
Voir des opérations de mise en forme de chaîne dans la documentation. Notez que% s et% d, etc., peuvent fonctionner différemment à la façon dont vous vous attendez si vous êtes habitué à la façon dont ils travaillent dans une autre langue, comme C.
En particulier,% s fonctionne aussi bien pour ints et flotte à moins que vous avez des exigences particulières de formatage où% d ou% f vous donnera plus de contrôle.
%s <=> str
%r <=> repr
%r appelle href="https://docs.python.org/3.6/library/functions.html#repr" rel="nofollow noreferrer"> repr()
sur l'objet, et insère le résultat chaîne retournée par __repr__
.
La chaîne retournée par __repr__
doit être sans ambiguïté 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')
in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'