Python Language Fonction de chaîne - str () et repr ()


Exemple

Deux fonctions peuvent être utilisées pour obtenir une représentation lisible d'un objet.

repr(x) appelle x.__repr__() : une représentation de x . eval convertira généralement le résultat de cette fonction en objet d'origine.

str(x) appelle x.__str__() : une chaîne lisible par l'homme qui décrit l'objet. Cela peut éluder certains détails techniques.


repr ()

Pour de nombreux types, cette fonction tente de renvoyer une chaîne qui donnerait un objet ayant la même valeur lorsqu'il est transmis à eval() . Sinon, la représentation est une chaîne entre crochets qui contient le nom du type de l'objet ainsi que des informations supplémentaires. Cela inclut souvent le nom et l'adresse de l'objet.

str ()

Pour les chaînes, cela renvoie la chaîne elle-même. La différence entre ceci et repr(object) est que str(object) ne tente pas toujours de renvoyer une chaîne acceptable pour eval() . Son objectif est plutôt de retourner une chaîne imprimable ou lisible par l'homme. Si aucun argument n'est donné, cela retourne la chaîne vide, '' .


Exemple 1:

s = """w'o"w"""
repr(s) # Output: '\'w\\\'o"w\''  
str(s)  # Output: 'w\'o"w'
eval(str(s)) == s  # Gives a SyntaxError 
eval(repr(s)) == s # Output: True

Exemple 2:

import datetime
today = datetime.datetime.now()
str(today)  # Output: '2016-09-15 06:58:46.915000'
repr(today) # Output: 'datetime.datetime(2016, 9, 15, 6, 58, 46, 915000)'

Lors de l'écriture d'une classe, vous pouvez remplacer ces méthodes pour faire ce que vous voulez:

class Represent(object):

    def __init__(self, x, y):
        self.x, self.y = x, y

    def __repr__(self):
        return "Represent(x={},y=\"{}\")".format(self.x, self.y)

    def __str__(self):
        return "Representing x as {} and y as {}".format(self.x, self.y)

En utilisant la classe ci-dessus, nous pouvons voir les résultats:

r = Represent(1, "Hopper")
print(r)  # prints __str__
print(r.__repr__)  # prints __repr__: '<bound method Represent.__repr__ of Represent(x=1,y="Hopper")>'
rep = r.__repr__()  # sets the execution of __repr__ to a new variable
print(rep)  # prints 'Represent(x=1,y="Hopper")'
r2 = eval(rep) # evaluates rep
print(r2)  # prints __str__ from new object
print(r2 == r)  # prints 'False' because they are different objects