was bedeutet %r
in der folgenden Aussage?was bedeutet% r in python
print '%r' % (1)
Ich glaube, ich habe von %s
gehört, %d
und %f
aber nie davon gehört.
was bedeutet %r
in der folgenden Aussage?was bedeutet% r in python
print '%r' % (1)
Ich glaube, ich habe von %s
gehört, %d
und %f
aber nie davon gehört.
Hintergrund:
In Python gibt es zwei eingebauten Funktionen zum Drehen eines Objekts in einen String: str
vs. repr
. str
soll eine freundliche, menschenlesbare Zeichenfolge sein. repr
soll detaillierte Informationen über den Inhalt eines Objekts enthalten (manchmal geben sie dasselbe zurück, z. B. für ganze Zahlen). Wenn es einen Python-Ausdruck gibt, der auf ein anderes Objekt ausgibt, das == ist, gibt repr
einen solchen Ausdruck, z.
>>> print repr('hi') 'hi' # notice the quotes here as opposed to... >>> print str('hi') hi
Wenn Sie einen Ausdruck der Rückkehr Sinn machen, nicht für ein Objekt, sollte repr
eine Zeichenfolge zurück, die beispielsweise durch < und> Symbole umgeben ist <blah>
.
Ihre ursprüngliche Frage zu beantworten:
Zusätzlich:
Sie können die Art und Weise eine Instanz Ihrer eigenen Klassen steuern konvertieren Zeichenketten durch Implementierung der Methoden und __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
Es ruft repr()
auf das Objekt und fügt die resultierende Zeichenfolge ein.
Es druckt den Ersatz als eine Zeichenfolge mit repr()
.
Siehe String Formatting Operations in der Dokumentation. Beachten Sie, dass% s und% d usw. anders funktionieren als erwartet, wenn Sie daran gewöhnt sind, wie sie in einer anderen Sprache arbeiten.
Insbesondere funktioniert% s auch gut für Ints und Floats, außer Sie haben spezielle Formatierungsanforderungen, wo% d oder% f mehr Kontrolle geben.
Zusätzlich zu den Antworten oben angegebenen, kann '%r'
in einem Szenario nützlich sein, wenn Sie eine Liste mit heterogenem Datentyp haben. Nehmen wir an, wir haben eine list = [1, 'apple' , 2 , 'r','banana']
Offensichtlich in diesem Fall mit '%d'
oder '%s'
würde einen Fehler verursachen. Stattdessen können wir '%r'
verwenden, um alle diese Werte zu drucken.
Bitte bearbeiten Sie Ihre Antwort – Rajesh
%s <=> str
%r <=> repr
%r
Anrufe repr()
auf das Objekt, und fügt den resultierenden String zurück durch __repr__
.
Die von __repr__
zurückgegebene Zeichenfolge sollte eindeutig sein und, wenn möglich, mit dem Quellcode übereinstimmen, der zum Wiederherstellen des dargestellten Objekts erforderlich ist.
Ein kurzes Beispiel:
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')
So
in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'
I% r gefunden habe zum Drucken eine Reihe von unbekannter Codierung, wenn sonst ein Fehler nützlich zu sein kann mit% s geworfen bekommen – dan