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.

Était-ce utile?

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 symboles par exemple <blah>.

Pour répondre à votre question initiale:

%s <-> str
%r <-> repr

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'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top