2016-07-17 10 views
0

Nach dem Python 2.7.12 documentation:Was macht! R in str() und repr()?

!s (gelten str()) und !r (gilt repr()) kann den Wert konvertiert werden, bevor sie formatiert wird.

>>> import math 
>>> print 'The value of PI is approximately {}.'.format(math.pi) 
The value of PI is approximately 3.14159265359. 
>>> print 'The value of PI is approximately {!r}.'.format(math.pi) 
The value of PI is approximately 3.141592653589793. 

Interessanterweise wird der umgewandelte Wert ist die Ausgabe von repr(), anstatt str().

>>> str(math.pi) 
'3.14159265359' 
>>> repr(math.pi) 
'3.141592653589793' 

Also was bedeutet "den Wert konvertieren" hier? Es weniger lesbar machen?

+0

Es ist interessant, unterschiedliche Genauigkeit für 'str (..)' und 'repr (..)' obwohl – SuperSaiyan

Antwort

4

Um etwas in eine Zeichenfolge zu formatieren, muss zuerst eine Zeichenfolgendarstellung dieses Objekts erstellt werden. "convert the value" spricht im Grunde davon, wie die String-Repräsentation konstruiert werden soll. In Python gibt es zwei ziemlich natürliche Wahlen, um eine Zeichenkettenrepräsentation von etwas zu erhalten ... str und repr. str ist in der Regel ein wenig mehr menschlich freundlich, repr ist in der Regel genauer. Vielleicht ist die official documentation ist der beste Ort, um den Unterschied zu gehen suchen:

object.__repr__(self)

  • Genannt durch die repr() eingebaute Funktion, die „offizielle“ String-Darstellung eines Objekts zu berechnen. Wenn es möglich ist, sollte dies wie ein gültiger Python-Ausdruck aussehen, der dazu verwendet werden könnte, ein Objekt mit demselben Wert (bei entsprechender Umgebung) neu zu erstellen. Wenn dies nicht möglich ist, sollte eine Zeichenfolge des Formats <...some useful description...> zurückgegeben werden. Der Rückgabewert muss ein String-Objekt sein. Wenn eine Klasse __repr__(), aber nicht __str__() definiert, wird __repr__() auch verwendet, wenn eine "informelle" Zeichenfolgendarstellung von Instanzen dieser Klasse erforderlich ist.

  • Dies wird normalerweise zum Debuggen verwendet. Daher ist es wichtig, dass die Darstellung informationsreich und eindeutig ist.

object.__str__(self)

  • Aufruf durch str (Objekt) und den integrierten Funktionen Format() und Drucken(), um die „informell“ oder gut bedruckbar String-Darstellung eines Objekts zu berechnen. Der Rückgabewert muss ein String-Objekt sein.

  • Diese Methode unterscheidet sich von object.__repr__() darin, dass es keine Erwartung gibt, dass __str__() einen gültigen Python-Ausdruck zurückgeben: eine bequemere oder prägnantere Darstellung kann verwendet werden.

  • Die durch das integrierte Objekt definierte Standardimplementierung ruft object.__repr__() auf.

In str.format wählt !sstr zu verwenden, um das Objekt zu formatieren, während !rrepr wählt den Wert zu formatieren.

Der Unterschied leicht mit Streichern gesehen (wie repr für eine Zeichenfolge gehören äußere Anführungszeichen) .:

>>> 'foo {}'.format('bar') 
'foo bar' 
>>> 'foo {!r}'.format('bar') 
"foo 'bar'" 

zwischen diesen beiden Methoden wirklich kritisch werden können, auf die Objekte abhängig zu sein, was der Unterschied formatiert. Für viele Objekte (z. B. solche, die die __str__-Methode nicht überschreiben) gibt es keinen Unterschied in der formatierten Ausgabe.

+0

So 'str()' wird standardmäßig verwendet, richtig? –

+1

@sunqingyao das ist richtig. – mgilson