. pow2_gen, g ; loop, StopIteration. loop, next(g) ( g.next() Python 2) StopIteration, g .
, .
, , , append , , , . .
. create_list create_gen , , . time_loop loop, time_apply - loop, .
def create_list(n=1000):
return [2**i for i in range(n)]
def create_gen(n=1000):
return (2**i for i in range(n))
def time_loop(iterator, n=1000):
for t in range(n):
for v in iterator:
pass
def time_apply(create_fn, fn_arg, n=1000):
for t in range(n):
iterator = create_fn(fn_arg)
time_loop(iterator, 1)
print('time_loop(create_list): %.3f' % timeit("time_loop(create_list(1000))",
setup="from __main__ import *",
number=10))
print('time_loop(create_gen): %.3f' % timeit("time_loop(create_gen(1000))",
setup="from __main__ import *",
number=10))
print('time_apply(create_list): %.3f' % timeit("time_apply(create_list, 1000)",
setup="from __main__ import *",
number=10))
print('time_apply(create_gen): %.3f' % timeit("time_apply(create_gen, 1000)",
setup="from __main__ import *",
number=10))
, (time_apply(create_list)) (, , ) (time_apply(create_gen)).
time_loop(create_list): 0.244
time_loop(create_gen): 0.028
time_apply(create_list): 21.190
time_apply(create_gen): 21.555
, , : time_loop(create_gen) , time_loop(create_list). , , , .
, (time_loop(create_list)) , (time_apply(create_gen)) .
, . 1000 , , . 100 000 -.
print('create big list: %.3f' % timeit("l = create_list(100000)",
setup="from __main__ import *",
number=10))
print('create big gen: %.3f' % timeit("g = create_gen(100000)",
setup="from __main__ import *",
number=10))
:
create big list: 209.748
create big gen: 0.023
Python 700 800 , ; . Python , , ; - .