2011-03-24 python performance
При генерации большого количества текстовой (например генерации web страницы) информации желательно не делать частое сложение в одну строку т.к. при увеличении большой строки происходит создание ещё большей строки и копирование туда данных. В данной статье приведен сравнительный тест сложения с помощью массива и join.
# coding: utf8
from timeit import Timer
word = u'0123456789abcdef'
count = 10
def test():
s = u''
for i in xrange(count):
s += word
def test_join():
s = []
for i in xrange(count):
s.append(word)
s = u''.join(s)
for i in xrange(4):
count *= 10
print '---'
print 'count:', count
s = Timer("test()", "from __main__ import test").timeit(number=1)
j = Timer("test_join()", "from __main__ import test_join").timeit(number=1)
print 'str %.4f' % s
print 'join %.4f' % j
print 'diff %.4f' % (s/j)
count: 100
str 0.0000
join 0.0000
diff 1.9300
---
count: 1000
str 0.0026
join 0.0002
diff 16.7831
---
count: 10000
str 1.0272
join 0.0017
diff 592.7783
---
count: 100000
str 226.2851
join 0.0179
diff 12633.2215