import timeit import string import random import io # === Test Data Generation === LINE_LENGTH = 10 SHORT_LINES = 5 LONG_LINES = 50 short_ascii_lines = [] short_unicode_lines = [] for i in range(SHORT_LINES): short_ascii_lines.append( ''.join(random.choice(string.printable) for i in range(LINE_LENGTH)) ) short_unicode_lines.append( ''.join(chr(random.randint(1, 0xFFFF)) for i in range(LINE_LENGTH)) ) long_ascii_lines = [] long_unicode_lines = [] for i in range(LONG_LINES): long_ascii_lines.append( ''.join(random.choice(string.printable) for i in range(LINE_LENGTH)) ) long_unicode_lines.append( ''.join(chr(random.randint(1, 0xFFFF)) for i in range(LINE_LENGTH)) ) # === def test_add(lines): s = "" for line in lines: s += line def test_join(lines): s = [] for line in lines: s.append(line) s = ''.join(s) def test_stringio(lines): s = io.StringIO() for line in lines: s.write(line) s = s.getvalue() print(" INPLACE_ADD short ascii") print(timeit.timeit(setup='from __main__ import test_add, short_ascii_lines', stmt='test_add(short_ascii_lines)')) print(" ''.join short ascii") print(timeit.timeit(setup='from __main__ import test_join, short_ascii_lines', stmt='test_join(short_ascii_lines)')) print(" StringIO short ascii") print(timeit.timeit(setup='from __main__ import test_stringio, short_ascii_lines', stmt='test_stringio(short_ascii_lines)')) print("") print(" INPLACE_ADD short unicode") print(timeit.timeit(setup='from __main__ import test_add, short_unicode_lines', stmt='test_add(short_unicode_lines)')) print(" ''.join short unicode") print(timeit.timeit(setup='from __main__ import test_join, short_unicode_lines', stmt='test_join(short_unicode_lines)')) print(" StringIO short unicode") print(timeit.timeit(setup='from __main__ import test_stringio, short_unicode_lines', stmt='test_stringio(short_unicode_lines)')) print("") print(" INPLACE_ADD long ascii") print(timeit.timeit(setup='from __main__ import test_add, long_ascii_lines', stmt='test_add(long_ascii_lines)')) print(" ''.join long ascii") print(timeit.timeit(setup='from __main__ import test_join, long_ascii_lines', stmt='test_join(long_ascii_lines)')) print(" StringIO long ascii") print(timeit.timeit(setup='from __main__ import test_stringio, long_ascii_lines', stmt='test_stringio(long_ascii_lines)')) print("") print(" INPLACE_ADD long unicode") print(timeit.timeit(setup='from __main__ import test_add, long_unicode_lines', stmt='test_add(long_unicode_lines)')) print(" ''.join long unicode") print(timeit.timeit(setup='from __main__ import test_join, long_unicode_lines', stmt='test_join(long_unicode_lines)')) print(" StringIO long unicode") print(timeit.timeit(setup='from __main__ import test_stringio, long_unicode_lines', stmt='test_stringio(long_unicode_lines)'))