Ich würde repr (myvariable) nicht verwenden - es gibt häufig Informationen über Klassentyp, Speicheradresse usw. zurück. Es ist nützlicher für das Debuggen. Verwenden Sie str (myvariable) für die Konvertierung in string und unicode (variable) für die Konvertierung in unicode.
Abgan
2
Was ist mit Unicode? So etwas str(u'ä')wird nicht funktionieren. Allerdings repr(u'ä')funktioniert.
Rouven B.
1
Was ist mit None und False?
Fredless
54
strsoll eine Zeichenfolgendarstellung der Objektdaten erzeugen. Wenn Sie Ihre eigene Klasse schreiben und für Sie arbeiten möchten str, fügen Sie hinzu:
def __str__(self):return"Some descriptive string"
print str(myObj)wird anrufen myObj.__str__().
reprist eine ähnliche Methode, die im Allgemeinen Informationen zu den Klasseninformationen erzeugt. reprErzeugt für die meisten Kernbibliotheksobjekte den Klassennamen (und manchmal einige Klasseninformationen) in spitzen Klammern. reprwird zum Beispiel verwendet, indem Sie Ihr Objekt einfach in Ihren Interaktionsbereich eingeben, ohne es zu verwenden printoder etwas anderes.
Sie können das Verhalten von reprfür Ihre eigenen Objekte genauso definieren wie das Verhalten von str:
Es ist wahrscheinlich richtig, dass die Mehrheit der object.__repr__Kernbibliotheksobjekte nach rohem Prozentsatz die Darstellung in spitzen Klammern zurückgibt, viele der am häufigsten verwendeten jedoch nicht. Als Faustregel für die reprist , dass , wenn es Sinn macht Python - Code zurückzugeben , die das gleiche Objekt ausgewertet werden konnten zu produzieren, das tun, wie gerade str, frozensetund die meisten anderen builtins tun, aber wenn dies nicht der Fall, verwenden Sie die Winkelhalterung Formular, um sicherzustellen, dass das, was Sie zurückgeben, möglicherweise nicht mit einem von Menschen lesbaren und als Quelle auswertbaren Repräsentanten verwechselt werden kann.
Abarnert
(Natürlich verstoßen einige der integrierten Funktionen gegen diese Faustregel - eine list, die sich selbst enthält, gibt etwas zurück, das nicht nur aussieht, sondern auch auswertbarer Code ist, der als falsch ausgewertet wird -, aber die Kernentwickler haben dies nie als Lizenz zur Erweiterung derselben angesehen Verhalten in die stdlib.)
abarnert
19
Ich sehe alle Antworten empfehlen zu verwenden str(object). Es kann fehlschlagen, wenn Ihr Objekt mehr als ASCII-Zeichen enthält und Sie Fehler wie sehen ordinal not in range(128). Dies war bei mir der Fall, als ich die Liste der Zeichenfolgen in eine andere Sprache als Englisch konvertierte
Wenn Sie die Art und Weise ändern möchten, wie das Objekt stringifiziert wird, definieren Sie die __str__(self)Methode für die Objektklasse. Eine solche Methode muss str oder Unicode-Objekt zurückgeben.
Welche Methode ist effizient? str(any_var)oderany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Auch wenn es einen merklichen Unterschied in der Ausführungszeit gibt (was ich bezweifle, aber ich empfehle Ihnen, es mit dem timeitModul zu überprüfen ), sollten Sie es verwenden, str(any_var)da es für den Menschen besser lesbar ist und es ermöglicht, von Fällen zu profitieren, wenn es any_vardefiniert ist, __repr__()aber nicht. t definieren __str__().
Gibt eine Zeichenfolge zurück, die eine gut druckbare Darstellung eines Objekts enthält. Bei Zeichenfolgen wird die Zeichenfolge selbst zurückgegeben. Der Unterschied zu repr (Objekt) besteht darin, dass str (Objekt) nicht immer versucht, eine Zeichenfolge zurückzugeben, die für eval () akzeptabel ist. Ziel ist es, eine druckbare Zeichenfolge zurückzugeben. Wenn kein Argument angegeben wird, wird die leere Zeichenfolge '' zurückgegeben.
Seien Sie vorsichtig, wenn Sie den Datentyp wirklich "ändern" möchten. Wie in anderen Fällen (z. B. Ändern des Iterators in einer forSchleife) kann dies zu unerwartetem Verhalten führen:
>> dct ={1:3,2:1}>> len(str(dct))12>>print(str(dct)){1:31,2:0}>> l =["all","colours"]>> len(str(l))18
str(var)
? ist es das, wonach du suchst?Antworten:
Alternativ können Sie auch repr:
Dies wird in Python als "Konvertierung" bezeichnet und ist weit verbreitet.
quelle
str(u'ä')
wird nicht funktionieren. Allerdingsrepr(u'ä')
funktioniert.str
soll eine Zeichenfolgendarstellung der Objektdaten erzeugen. Wenn Sie Ihre eigene Klasse schreiben und für Sie arbeiten möchtenstr
, fügen Sie hinzu:print str(myObj)
wird anrufenmyObj.__str__()
.repr
ist eine ähnliche Methode, die im Allgemeinen Informationen zu den Klasseninformationen erzeugt.repr
Erzeugt für die meisten Kernbibliotheksobjekte den Klassennamen (und manchmal einige Klasseninformationen) in spitzen Klammern.repr
wird zum Beispiel verwendet, indem Sie Ihr Objekt einfach in Ihren Interaktionsbereich eingeben, ohne es zu verwendenprint
oder etwas anderes.Sie können das Verhalten von
repr
für Ihre eigenen Objekte genauso definieren wie das Verhalten vonstr
:>>> myObj
in Ihrem Interaktionsbereich oderrepr(myObj)
wird dazu führenmyObj.__repr__()
quelle
object.__repr__
Kernbibliotheksobjekte nach rohem Prozentsatz die Darstellung in spitzen Klammern zurückgibt, viele der am häufigsten verwendeten jedoch nicht. Als Faustregel für dierepr
ist , dass , wenn es Sinn macht Python - Code zurückzugeben , die das gleiche Objekt ausgewertet werden konnten zu produzieren, das tun, wie geradestr
,frozenset
und die meisten anderen builtins tun, aber wenn dies nicht der Fall, verwenden Sie die Winkelhalterung Formular, um sicherzustellen, dass das, was Sie zurückgeben, möglicherweise nicht mit einem von Menschen lesbaren und als Quelle auswertbaren Repräsentanten verwechselt werden kann.list
, die sich selbst enthält, gibt etwas zurück, das nicht nur aussieht, sondern auch auswertbarer Code ist, der als falsch ausgewertet wird -, aber die Kernentwickler haben dies nie als Lizenz zur Erweiterung derselben angesehen Verhalten in die stdlib.)Ich sehe alle Antworten empfehlen zu verwenden
str(object)
. Es kann fehlschlagen, wenn Ihr Objekt mehr als ASCII-Zeichen enthält und Sie Fehler wie sehenordinal not in range(128)
. Dies war bei mir der Fall, als ich die Liste der Zeichenfolgen in eine andere Sprache als Englisch konvertierteIch habe es mit gelöst
unicode(object)
quelle
str(object)
wird den Trick machen.Wenn Sie die Art und Weise ändern möchten, wie das Objekt stringifiziert wird, definieren Sie die
__str__(self)
Methode für die Objektklasse. Eine solche Methode muss str oder Unicode-Objekt zurückgeben.quelle
str(any_var)
oderany_var.__str__()
timeit
Modul zu überprüfen ), sollten Sie es verwenden,str(any_var)
da es für den Menschen besser lesbar ist und es ermöglicht, von Fällen zu profitieren, wenn esany_var
definiert ist,__repr__()
aber nicht. t definieren__str__()
.Verwenden Sie das
str
eingebaute:Beispiele:
Aus der Dokumentation:
quelle
Mit
str(x)
. Jeder Datentyp kann jedoch eine eigene Zeichenfolgenkonvertierung definieren, sodass dies möglicherweise nicht das ist, was Sie möchten.quelle
Sie können
%s
wie unten verwendenquelle
Verwenden Sie einfach
str
- zum Beispiel:quelle
Formatierung verwenden:
Beispiel:
Ausgabe: Do 11. Januar 20:40:05 2018
quelle
Seien Sie vorsichtig, wenn Sie den Datentyp wirklich "ändern" möchten. Wie in anderen Fällen (z. B. Ändern des Iterators in einer
for
Schleife) kann dies zu unerwartetem Verhalten führen:quelle