Geschwindigkeit: String verketten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
amc
User
Beiträge: 3
Registriert: Freitag 14. August 2009, 12:13

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
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.
Antworten