У меня ниже двух функций:
def foo(n=50000):
return sum(i*i for i in range(n)) # just called sum() directly without
def bar(n=50000):
return sum([i*i for i in range(n)]) # passed constructed list to sum()
Я надеялся, что foo
будет работать быстрее, чем bar
но я проверил в ipython с %%timeit
что foo
занимает немного больше времени, чем bar
In [2]: %%timeit
...: foo(50000)
...:
100 loops, best of 3: 4.22 ms per loop
In [3]: %%timeit
...: bar(50000)
...:
100 loops, best of 3: 3.45 ms per loop
In [4]: %%timeit
...: foo(10000000)
...:
1 loops, best of 3: 1.02 s per loop
In [5]: %%timeit
...: bar(10000000)
...:
1 loops, best of 3: 869 ms per loop
Разница увеличивается по мере увеличения значения n, поэтому я попытался проверить функцию с dis.dis(foo)
и dis.dis(bar)
но она была идентичной.
Итак, какова будет причина такой разницы во времени между обоими методами?