#!/usr/bin/python # -*- coding: utf-8 -*- import time try: xrange except NameError: xrange = range def main(): for f in [call_once, call_conditionally_mod, call_twice, iterate_twice, try_except, floating_point_arithmetic]: print('%6.2fμs %s' % (1e6 * timetil(f), f.__name__)) def timetil(f): n = 1 mindur = None while True: start = time.time() f(n) dur = time.time() - start if mindur is None or dur < mindur: mindur = dur if dur - mindur > 1.0: return (dur - mindur) / n n *= 2 def nop(): pass def call_once(n): for i in xrange(n): nop() def call_conditionally_mod(n): for i in xrange(n): if i % 2: nop() else: nop() def call_twice(n): for i in xrange(n): call_once(1) def iterate_twice(n): for i in xrange(n): for i in xrange(1): nop() def floating_point_arithmetic(n): k = 1.0 for i in xrange(n): k *= i def try_except(n): for i in xrange(n): try: raise Exception except Exception: pass if __name__ == '__main__': main()