(original) (raw)
# -*- coding: utf-8 -*- import codecs, timeit def bench_decode(encoding, string): try: x = eval(string).encode(encoding) except UnicodeEncodeError: return setup = ''' import codecs d = codecs.getdecoder({encoding!r}) x = {x!r} '''.format(encoding=encoding, x=x) t = timeit.Timer('d(x)', setup) repeat = 10 number = 10000 precision = 3 r = t.repeat(repeat, number) best = min(r) usec = best * 1e6 / number print("%-8s %-20s %4.1f" % (encoding, string, usec)) for encoding in ('ascii', 'latin1', 'utf-8', 'utf-16le', 'utf-16be', 'utf-32le', 'utf-32be'): for string in ('" " * 1000', '"\\u0080" * 1000', '"\\u0100" * 1000', '"\\u0800" * 1000', '"\\u8000" * 1000', '"\\U00010000" * 1000'): bench_decode(encoding, string) print()