# Micro-benchmark for str.translate() # Use: "./python benchmark.py script translate_script.py" with: # https://bitbucket.org/haypo/misc/src/tip/python/benchmark.py def run_benchmark(bench): for group, text_setup, after in ( ("replace none", 'chr(ord(before)-1) * length', 'b'), ("replace 10%", '(before + "-"*9) * (length // 10)', 'b'), ("replace 50%", '(before + "-") * (length // 2)', 'b'), ("replace 90%", '(before*9 + "-") * (length // 10)', 'b'), ("replace all", 'before * length', 'b'), ("remove none", 'chr(ord(before)-1) * length', None), ("remove 10%", '(before + "-"*9) * (length // 10)', None), ("remove 50%", '(before + "-") * (length // 2)', None), ("remove 90%", '(before*9 + "-") * (length // 10)', None), ("remove all", 'before * length', None), ): for length in ('10', '10**3', '10**6'): setup = ('length=%s; before = %r; text=%s; ' 'mapping=str.maketrans({before: %r})' % (length, 'a', text_setup, after)) bench.timeit('text.translate(mapping)', setup, "%s, length=%s" % (group, length))