Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import timeit
- from collections import namedtuple
- from operator import attrgetter
- from contextlib import contextmanager
- @contextmanager
- def start_stop(msg):
- print('*'*10, msg, '*'*10)
- yield
- print('ok')
- def pretty_result(repeat_list_with_seconds):
- cum_time = sum(repeat_list_with_seconds)
- avg = cum_time / repeat / loops
- print('cum_time = {}, avg = {}'.format(cum_time, avg))
- with start_stop('create test data'):
- test = namedtuple('test', 'id')
- container = [test(i) for i in range(100)]
- with start_stop('create cases'):
- loop = """result = {}
- for i in container:
- result[i.id] = 1
- """
- gen = """ids = map(attrgetter('id'), container)
- result = dict.fromkeys(ids, 1)
- """
- comp = "{i.id: 1 for i in container}"
- setup = 'from __main__ import test, container, attrgetter'
- with start_stop('run tests'):
- loops = 1_000_000
- repeat = 5
- with start_stop('gen'):
- time_in_seconds = timeit.repeat(gen, setup=setup, repeat=repeat, number=loops)
- pretty_result(time_in_seconds)
- with start_stop('comp'):
- time_in_seconds = timeit.repeat(comp, setup=setup, repeat=repeat, number=loops)
- pretty_result(time_in_seconds)
- with start_stop('loop'):
- time_in_seconds = timeit.repeat(loop, setup=setup, repeat=repeat, number=loops)
- pretty_result(time_in_seconds)
- # output
- $ python3 gen_loop_tests.py
- ********** create test data **********
- ok
- ********** create cases **********
- ok
- ********** run tests **********
- ********** gen **********
- cum_time = 64.32173748599962, avg = 1.2864347497199924e-05
- ok
- ********** comp **********
- cum_time = 50.536007013000926, avg = 1.0107201402600186e-05
- ok
- ********** loop **********
- cum_time = 51.675969284999155, avg = 1.0335193856999831e-05
- ok
- ok
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement