import os, sys # pythons to test, command prefixes (Windows) pythons = ("py -3", "py -2", "C:\PyPy\pypy-1.9\pypy") # tests to run, command suffixes tests = ( # numbered vs auto-numbered fields: negligable effect #"-", #"-m timeit -n 10000 -r 5 \"s = '{}, {}, {}, {}' .format(123, 'spam', [1, 2], 7.89)\"", # str.format() "-", "-m timeit -n 10000 -r 5 \"s = '{0:}, {1:}, {2:}, {3:}' .format(123, 'spam', [1, 2], 7.89)\"", "-m timeit -n 10000 -r 5 \"s = '{:d}, {}, {}, {:f}' .format(123, 'spam', [1, 2], 7.89)\"", "-m timeit -n 10000 -r 5 \"s = '{:d}, {:<6s}, {}, {:.2f}'.format(123, 'spam', [1, 2], 7.89)\"", # str % fmt, equivalent cases "-", "-m timeit -n 10000 -r 5 \"s = '%s, %s, %s, %s' % (123, 'spam', [1, 2], 7.89)\"", "-m timeit -n 10000 -r 5 \"s = '%d, %s, %s, %f' % (123, 'spam', [1, 2], 7.89)\"", "-m timeit -n 10000 -r 5 \"s = '%d, %-6s, %s, %.2f' % (123, 'spam', [1, 2], 7.89)\"", # from http://sebastianraschka.com/Articles/2014_python_performance_tweaks.html#string_assembly "-", "-m timeit -n 10000 -r 5 \"x = ['a' + '1' + '2' for i in range(100)]\"", "-m timeit -n 10000 -r 5 \"x = ['a{}{}'.format('1', '2') for i in range(100)]\"", "-m timeit -n 10000 -r 5 \"x = ['a%s%s' % ('1', '2') for i in range(100)]\"", # same, but add func call: part of the slowdown in str.format() versus in-line expr? "-m timeit -n 10000 -r 5 -s \"def fmt(f, t): return f % t\"" " \"x = [fmt('a%s%s', ('1', '2')) for i in range(100)]\"" ) for python in pythons: print('=' * 80) print(os.popen(python + ' -c "import sys; print(sys.version)"').read()) for test in tests: if len(test) == 1: print(test * 80) else: cmd = python + ' ' + test print(cmd) print('\t' + os.popen(cmd).read()) if sys.platform.lower().startswith('win'): input('[Press Enter]') # stay open if clicked