172 Stimmen

Wie kann man einen beliebigen Datentyp in eine Zeichenkette umwandeln?

Wie kann ich in Python einen beliebigen Datentyp in eine Zeichenkette umwandeln?

12 Stimmen

str(var) ? ist es das, wonach Sie suchen?

2 Stimmen

Möchten Sie eine menschenlesbare Zeichenkettendarstellung der Daten? Oder wollen Sie eine byteorientierte Ansicht des Speichers, der die Daten enthält?

0 Stimmen

Seien Sie vorsichtig mit der Art der Daten, die Sie ändern möchten. Siehe Antwort unten

152voto

Donald Miner Punkte 37271
myvariable = 4
mystring = str(myvariable)  # '4'

alternativ kann man auch die repr:

mystring = repr(myvariable) # '4'

Dies wird in Python "Konvertierung" genannt und ist durchaus üblich.

6 Stimmen

Ich würde repr(myvariable) nicht verwenden - es liefert oft Informationen über den Klassentyp, die Speicheradresse usw. Es ist eher für die Fehlersuche nützlich. Verwenden Sie str(meinevariable) für die Konvertierung in String und unicode(variable) für die Konvertierung in Unicode.

5 Stimmen

Was ist mit Unicode? Etwas wie str(u'ä') wird nicht funktionieren. Allerdings repr(u'ä') wird funktionieren.

2 Stimmen

Was ist mit "Keine" und "Falsch"?

74voto

Brian S Punkte 4728

str soll eine Zeichenkettendarstellung der Daten des Objekts erzeugen. Wenn Sie Ihre eigene Klasse schreiben und Sie wollen str um für Sie zu arbeiten, hinzufügen:

def __str__(self):
    return "Some descriptive string"

print str(myObj) wird anrufen myObj.__str__() .

repr ist eine ähnliche Methode, die im Allgemeinen Informationen über die Klasse info liefert. Für die meisten Kernbibliotheksobjekte, repr erzeugt den Klassennamen (und manchmal auch einige Klasseninformationen) zwischen spitzen Klammern. repr wird beispielsweise verwendet, indem das Objekt einfach in das Interaktionsfenster eingegeben wird, ohne dass die print oder etwas anderes.

Sie können das Verhalten von repr für Ihre eigenen Objekte definieren, so wie Sie das Verhalten von str :

def __repr__(self):
    return "Some descriptive string"

>>> myObj in Ihrem Interaktionsbereich, oder repr(myObj) wird zu folgenden Ergebnissen führen myObj.__repr__()

0 Stimmen

Es ist wahrscheinlich wahr, dass die meisten Objekte der Kernbibliothek prozentual die object.__repr__ -Darstellung in spitzen Klammern, aber viele der am häufigsten verwendeten tun dies nicht. Die Faustformel für repr ist, dass, wenn es sinnvoll ist, Python-Code zurückzugeben, der ausgewertet werden kann, um dasselbe Objekt zu erzeugen, dies zu tun, genau wie str , frozenset und die meisten anderen Builtins tun dies, aber wenn nicht, verwenden Sie die eckige Klammerform, um sicherzustellen, dass das, was Sie zurückgeben, unmöglich mit einer für Menschen lesbaren und auswertbaren Quelltextausgabe verwechselt werden kann.

0 Stimmen

(Natürlich verstoßen einige der eingebauten Programme gegen diese Faustregel - ein list das selbst etwas zurückgibt, das nicht nur so aussieht, sondern auch auswertbarer Code ist, der das Falsche auswertet - aber die Kernentwickler haben das nie als Freibrief genommen, dasselbe Verhalten in die stdlib zu übertragen).

0 Stimmen

Erlaubt jede Klasse/jeder Typ in Python immer str ohne Fehler aufgerufen werden?

21voto

Madhav Punkte 691

Ich sehe, dass alle Antworten die Verwendung von str(object) . Es könnte fehlschlagen, wenn Ihr Objekt mehr als ASCII-Zeichen hat und Sie werden eine Fehlermeldung sehen wie ordinal not in range(128) . Dies war bei mir der Fall, als ich eine Liste von Zeichenfolgen in einer anderen Sprache als Englisch konvertierte

Ich habe das Problem gelöst, indem ich unicode(object)

12 Stimmen

In Python 3.0 aufwärts macht str(object) standardmäßig Unicode

0 Stimmen

Erlaubt jede Klasse/jeder Typ in Python immer str ohne Fehler aufgerufen werden?

14voto

Abgan Punkte 3574

str(object) reicht aus.

Wenn Sie die Art und Weise, wie ein Objekt in eine Zeichenkette umgewandelt wird, ändern möchten, definieren Sie __str__(self) Methode für die Klasse des Objekts. Eine solche Methode muss str oder ein Unicode-Objekt zurückgeben.

1 Stimmen

Welche Methode ist effizient? str(any_var) o any_var.__str__()

0 Stimmen

@Kedar.Aitawdekar: Selbst wenn es einen spürbaren Unterschied in der Ausführungszeit gibt (was ich bezweifle, aber ich möchte Sie ermutigen, es mit timeit Modul), sollten Sie str(any_var) da sie für Menschen besser lesbar ist und es ermöglicht, von Fällen zu profitieren, in denen any_var definiert __repr__() definiert aber nicht __str__() .

0 Stimmen

Vielen Dank für Ihre Antwort.

12voto

miku Punkte 170688

Verwenden Sie die str eingebaut:

x = str(something)

Beispiele:

>>> str(1)
'1'
>>> str(1.0)
'1.0'
>>> str([])
'[]'
>>> str({})
'{}'

...

Aus der Dokumentation:

Gibt eine Zeichenkette zurück, die eine gut druckbare Darstellung eines Objekts enthält. Bei Zeichenketten wird die Zeichenkette selbst zurückgegeben. Der Unterschied zu repr(object) besteht darin, dass str(object) nicht immer versucht, eine Zeichenkette zurückzugeben, die für eval() akzeptabel ist; sein Ziel ist es, eine druckbare Zeichenkette zurückzugeben. Wenn kein Argument angegeben wird, wird die leere Zeichenkette '' zurückgegeben.

0 Stimmen

Erlaubt jede Klasse/jeder Typ in Python immer str ohne Fehler aufgerufen werden?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X