Seite 1 von 1

Geschwindigkeit: String verketten

Verfasst: Samstag 19. September 2009, 07:12
von amc
Hallo,

da man ja immer liest, man sollte den +-Operator nicht zum Verketten von Strings verwenden, habe ich mich mal nach Alternativen umgeschaut, und bin dabei auf .join() gestoßen und habe es ausprobiert (was auch ganz klar schneller ist, siehe http://img5.imagebanana.com/view/53yxf0d/string.png, 1 - Mit dem +-Operator; 2 - join()).

Was mich jetzt interessiert ist, ob es vielleicht noch schnellere Varianten gibt, Strings aneinander zu hängen? Angenommen, man möchte so etwas verbinden:

Code: Alles auswählen

print(greeting + 'Sie sind ' + first_name + ' ' + last_name)
Mir fallen noch diese Möglichkeiten ein:

Code: Alles auswählen

print(greeting, 'Sie sind', first_name, last_name)

# und

print('{}Sie sind {} {}.'.format(greeting, first_name, last_name))

Leider weiß ich nicht, wie man die Ausführgeschwindigkeit von den beiden letzen testen könnte. Gibt es da eine Möglichkeit? Und wenn ja, welche Variante sollte man nutzen?

Vielen Dank schonmal,
amc

Verfasst: Samstag 19. September 2009, 07:32
von BlackJack
@amc: Man sollte die lesbarere und wartungsfreundlichere Variante verwenden.

Ich persönlich hätte jetzt ``print '%s, Sie sind %s %s.' % (greeting, first_name, last_name)`` verwendet, weil das mit Python 2.5 funktioniert. :-)

Es ist nicht generell das `+` langsam, sondern es kann langsam werden, wenn man in einer Schleife eine Zeichenkette hat, die bei jedem Schleifendurchlauf länger wird, weil dann bei jedem Schleifendurchlauf potentiell mehr Daten durch die Gegend kopiert werden müssen und sich "Müll" im Speicher sammeln kann, bevor der Garbage Collector zuschlägt. Bevor jetzt jemand Referenzzähler und gewisse Optimierungen einwirft: CPython ist nicht die einzige Implementierung und beides wird von der Sprache nicht garantiert.