web-dev-qa-db-fra.com

quelle est la signification de% r en python

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.

54
photon

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:

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

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
69
allyourcode

Il appelle repr() sur l'objet et insère la chaîne résultante.

21

Il imprime le remplacement sous forme de chaîne avec repr().

4
Xorlev

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.

3
Hetal Patel

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'"
1
Shreyash Ghagare
%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'
0
sheldonzy

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.

0
John La Rooy