Beim Profilieren eines Teils des Python-Codes ( python 2.6
bis zu 3.2
) stellte ich fest, dass die
str
Methode zum Konvertieren eines Objekts (in meinem Fall einer Ganzzahl) in eine Zeichenfolge fast eine Größenordnung langsamer ist als die Verwendung der Zeichenfolgenformatierung.
Hier ist der Benchmark
>>> from timeit import Timer
>>> Timer('str(100000)').timeit()
0.3145311339386332
>>> Timer('"%s"%100000').timeit()
0.03803517023435887
Weiß jemand warum das so ist? Vermisse ich etwas
python
string
performance
python-3.x
python-2.7
Luca Sbardella
quelle
quelle
'{}'.format(100000)
Antworten:
'%s' % 100000
wird vom Compiler ausgewertet und entspricht zur Laufzeit einer Konstanten.%
mit einem Laufzeitausdruck ist nicht (signifikant) schneller alsstr
:Beachten Sie, dass dies
str
immer noch etwas langsamer ist, wie @DietrichEpp sagte. Dies liegt daran,str
dass Such- und Funktionsaufrufoperationen erforderlich sind, während%
ein einzelner sofortiger Bytecode kompiliert wird:Dies gilt natürlich für das System, auf dem ich getestet habe (CPython 2.7). andere Implementierungen können abweichen.
quelle
str
. Danke für die Antwort. Kein Grund, den Code überall zu ändern :-)str
ist ein Name, der auf einen anderen Wert als den Zeichenfolgentyp zurückgesetzt werden kann, aber die Zeichenfolgenformatierung - dh diestr.__mod__
Methode - kann nicht ersetzt werden, sodass der Compiler die Optimierung durchführen kann. Der Compiler macht nicht viel in Bezug auf die Optimierung, aber er macht mehr als Sie vielleicht denken :)Ein Grund, der mir in den Sinn kommt, ist die Tatsache, dass
str(100000)
eine globale Suche"%s"%100000
erforderlich ist , dies jedoch nicht. Dasstr
Globale muss im globalen Bereich nachgeschlagen werden. Dies erklärt nicht den gesamten Unterschied:Wie von thg435 festgestellt ,
quelle