Daten|teiler
Kopieren als Kulturtechnik

Wissenswertes über Python: String-Formatierung

29. April 2011 von Christian Imhorst

Bekannterweise sind Verkettungen von Strings in Python, mit dem Plus-Operator (+) sehr einfach zu machen. Man kann auch eine Zahl mit einem String verketten, wenn man die Zahl vorher explizit mit str() in einen String umwandelt:

>>> s = 'Ich bin ein String'
>>> i = 123
>>> type(s)
<type 'str'>
>>> type(i)
<type 'int'>
>>> str(i) + ' ' + s + '!'
'123 Ich bin ein String!'

So praktisch sie auch sind, man sollte solche Verkettungen von Zeichenketten mit dem +-Operator vermeiden, da sie zu Lasten der Performance gehen. In Python sind Strings unveränderliche (immutable) Objekte, daher werden außer dem Ergebnis-String temporär weitere Strings angelegt, die hinterher von der Laufzeitumgebung wieder entsorgt werden müssen (garbage collection). In meinem Beispiel wird inklusive Ergebnis-String dreimal ein neuer String konstruiert und die beiden temporär erstellten Vorgänger werden wieder freigegeben. Dabei muss jedes Mal der Inhalt des alten Strings in den neuen kopiert werden, was alles zusammen Performance frisst.

Die Erzeugung des Ergebnis-Strings sollte man daher an einen String-Formatierer übergeben:

>>> '%d %s!' % (i, s)
'123 Ich bin ein String!'

Dabei sind %d und %s Platzhalter für den Inhalt der Variablen i und s. Die Platzhalter sind aber nicht frei wählbar, so steht %d für Dezimalzahlen, %s für Strings, %x für Hexadezimalzahlen, %e, %f und %g für Gleitkommazahlen. Bei der String-Formatierung entfällt nicht nur das Kopieren der String-Inhalte in neue Strings und das anschließende Aufräumen, sondern auch die explizite Typumwandlung der Ganzzahl in i in einen String mit str(), was einfach performanter ist.

Geschrieben in Python