10 Mayıs 2012, PERŞEMBE
python str performans
Python kod parçası (python 2.6
3.2
) profil oluşturma sırasında, keşfettim
Bir dize için bir nesne (benim durumumda bir tam sayı) dönüştürmek için 6* *yöntem neredeyse bir büyüklük sırası dize biçimlendirme kullanarak daha yavaştır.
Burada kriter
>>> from timeit import Timer
>>> Timer('str(100000)').timeit()
0.3145311339386332
>>> Timer('"%s"0000').timeit()
0.03803517023435887
Herkes bu durumda neden biliyor mu? Bir şey mi kaçırdım?
CEVAP
10 Mayıs 2012, PERŞEMBE
'%s' % 100000
derleyici tarafından değerlendirilir ve çalışma zamanında bir sabiti eşdeğerdir.
>>> import dis
>>> dis.dis(lambda: str(100000))
8 0 LOAD_GLOBAL 0 (str)
3 LOAD_CONST 1 (100000)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(lambda: '%s' % 100000)
9 0 LOAD_CONST 3 ('100000')
3 RETURN_VALUE
Çalışma zamanı ifade ile %
(çok önemli) daha hızlı str
daha değil:
>>> Timer('str(x)', 'x=100').timeit()
0.25641703605651855
>>> Timer('"%s" % x', 'x=100').timeit()
0.2169809341430664
Yapmak unutmayın str
hala biraz daha yavaş olarak @DietrichEpp dedi. str
arama fonksiyonu içerir ve arama işlemleri sırasında %
derler bir tek acil bayt kodu:
>>> dis.dis(lambda x: str(x))
9 0 LOAD_GLOBAL 0 (str)
3 LOAD_FAST 0 (x)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(lambda x: '%s' % x)
10 0 LOAD_CONST 1 ('%s')
3 LOAD_FAST 0 (x)
6 BINARY_MODULO
7 RETURN_VALUE
Elbette yukarıdaki test sistemi (CPython 2.7) için de geçerlidir; diğer uygulamalar farklı olabilir.
Bunu Paylaş:
Python performans sorunu okuyun...
python str performans...
Bir Python komut dosyası kullanarak me...
Nasıl Python Fibonacci Dizisi yazmak...
pythonw.exe ya python.exe?...