6 Möglichkeiten zum Stringen von Objekten in Python

Verwandte: % und str.format () in Python. Welches benutzt du?

F-Strings wurden oben erwähnt, aber ich bin der Meinung, dass dies nicht die einzige Möglichkeit ist, sie in Strings umzuwandeln. Hier sind einige Dinge, die als Memos in den Sinn kommen.

str () und repr ()

>>> import datetime
>>> d = datetime.datetime(2017, 9, 1, 12, 12, 0, 0)
>>> str(d)
'2017-09-01 12:12:00'
>>> repr(d)
'datetime.datetime(2017, 9, 1, 12, 12)'
>>> eval(repr(d))
datetime.datetime(2017, 9, 1, 12, 12)

"Repr (obj)" ruft intern "obj .__ repr__ ()" auf, und "str (obj)" implementiert intern "obj .__ str__ ()", wenn dies nicht der Fall ist, andernfalls "obj. repr () `wird aufgerufen und stattdessen verwendet.

Es wird erwartet, dass das Ergebnis von "repr (obj)" nach Möglichkeit ein Python-Ausdruck ist, dies ist jedoch nicht immer der Fall. Im obigen Datum / Uhrzeit-Beispiel wird eine Zeichenfolge zurückgegeben, die mit "eval ()" ausgewertet werden kann.

Es ist nicht erforderlich, dass das Ergebnis von "str (obj)" ein Python-Ausdruck ist, und es ist üblich, ein für Menschen lesbares Format zu priorisieren.

Wenn Sie "ein Objekt in eine einfach zu lesende Zeichenfolge konvertieren" sagen, können Sie beispielsweise an das Modul "pprint" denken. Es scheint, dass es "obj .__ repr__ ()" verwendet. Nun, es ist unmöglich, die Struktur aus dem Ergebnis von __str __ () zu erfassen.

% Operator und String-Methode str.format ()

Es war das Thema des obigen Artikels. Ich denke, es ist das Wichtigste in der täglichen Entwicklung, aber es wird weggelassen.

f-strings

Eine in Python 3.6 eingeführte Notation, mit der Sie Python-Ausdrücke direkt in eine Zeichenfolge schreiben können.

PEP 498 -- Literal String Interpolation

Ein Beispiel für FizzBuzz.

>>> print(*[f"{'Fizz'*(not i%3)}{'Buzz'*(not i%5)}" or i for i in range(1,31)], sep='\n')
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz

Ich beziehe mich auf Reddits "ein Py3.6-fizzBuzz-Oneliner mit F-Strings", aber auf "map ()" Ich habe es in die Listeneinschlussnotation geändert, weil es in letzter Zeit komfortabler zu sein scheint (redu () hat möglicherweise die Bibliothek gelöscht).

Um auf der sicheren Seite zu sein, gibt das "*" am Anfang des "print ()" - Arguments an, dass die Liste entpackt wird.

In Bezug auf die Typprüfung schaut mindestens mypy 0.521 in f-Strings.

$ mypy --version
mypy 0.521
$ cat /tmp/test.py
def func(a: int) -> int:
    return a ** 2

print(f'{func(10.0)}')
$ python /tmp/test.py
100.0
$ mypy /tmp/test.py
/tmp/test.py:4: error: Argument 1 to "func" has incompatible type "float"; expected "int"

Leider verwende ich oft 3.5 oder früher, daher habe ich nicht die Initiative ergriffen, um es zu vereinheitlichen. Ich denke jedoch, dass in Zukunft die Möglichkeit besteht, dass F-Strings zum Zentrum werden und str.format () überwinden.

Vorlagenzeichenfolge

https://docs.python.jp/3/library/string.html#template-strings

Python verfügt über eine integrierte Funktionalität für Vorlagenzeichenfolgen, die die Variable "$" als alte Funktion ersetzt. Ich werde das obige Beispiel kurz vorstellen.

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'

Leider werden HTML-Escape usw. nicht unterstützt. Ich sehe es selten persönlich, aber ich habe darüber nachgedacht, es zu benutzen.

Andere

Der Titel sagt sechs, aber es gibt noch einige Standard-Python-Funktionen.

Es sollte andere Möglichkeiten geben, es mithilfe einer externen Bibliothek wie jinja2 in einen String zu konvertieren. Wenn Sie es selbst machen, haben Sie natürlich mehr Auswahlmöglichkeiten.

Recommended Posts

6 Möglichkeiten zum Stringen von Objekten in Python
String-Manipulation in Python
3 Möglichkeiten, Zeitzeichenfolgen mit Python zu analysieren [Hinweis]
Einbetten von Variablen in Python-Strings
[Python] Datum in Zeichenfolge konvertieren
So löschen Sie stdout in Python
String-Objektmethoden in Python
Objektäquivalenzbeurteilung in Python
Sprechen mit Python [Text zu Sprache]
Datumsmanipulation von Strings in Python
Wie man in Python entwickelt
Post an Slack in Python
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte eine Variable in einen Python-String einbetten
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
[Python] So erweitern Sie Variablen in einer Zeichenfolge
Vorbereiten der Steuerung von Nashornobjekten mit Skripten in Grasshopper / Python
[Python] Wie man PCA mit Python macht
Konvertieren Sie Markdown in Python in PDF
So sammeln Sie Bilder in Python
Im Python-Befehl zeigt Python auf Python3.8
Zuweisungen und Änderungen in Python-Objekten
Verschiedene Methoden zur Berechnung der Ähnlichkeit zwischen Daten mit Python
Versuchen Sie, Trace in Python zu berechnen
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Python-String
Untersuchen Sie die Klasse eines Objekts mit Python
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Erstellen Sie eine zufällige Zeichenfolge in Python
Umgang mit Japanisch mit Python
Eine Alternative zu "Pause" in Python
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
Zeitzonenspezifikation beim Konvertieren einer Zeichenfolge in einen Datums- / Uhrzeittyp mit Python
Verschiedene Möglichkeiten, um in Python ein Array von Zahlen von 1 bis 10 zu erstellen.
Ich habe versucht, PLSA in Python zu implementieren
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Versuchen Sie, sich mit Python bei qiita anzumelden
Installieren Sie Pyaudio, um Wellen in Python zu spielen
Ich habe versucht, Permutation in Python zu implementieren
Methode zum Erstellen einer Python-Umgebung in Xcode 6
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
Pin aktuelles Verzeichnis an Skriptverzeichnis in Python
[Itertools.permutations] So löschen Sie eine Sequenz in Python
PUT gzip direkt in S3 in Python
Senden Sie mit Python (Python3) E-Mails an mehrere Empfänger.
Konvertieren Sie die psd-Datei in Python in png
Beispielskript zum Überfüllen von Signalen in Python
Ich habe versucht, PLSA in Python 2 zu implementieren
So setzen Sie die Standardcodierung in Python auf utf-8
Dekorateur zur Vermeidung von UnicodeEncodeError in Python 3 print ()
[Python] So invertieren Sie eine Zeichenfolge
Melden Sie sich mit Anforderungen in Python bei Slack an
Wie bekomme ich Stacktrace in Python?