Генераторы и производительность списков в Python

В настоящее время я изучал генераторы и составление списков, и возился с профилировщиком, чтобы увидеть, как прирост производительности наткнулся на этот cProfile, представляющий собой сумму простых чисел в большом диапазоне с использованием обоих.

Я вижу, что в генераторе: 1 genexpr как совокупное время короче, чем в аналоге списка, но вторая строка - то, что сбивает меня с толку. Выполняет ли вызов, который, я думаю, является проверкой числа, прост, но тогда не должен быть другой: 1 модуль в понимании списка?

Я что-то упустил в профиле?

In [8]: cProfile.run('sum((number for number in xrange(9999999) if number % 2 == 0))')
         5000004 function calls in 1.111 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
  5000001    0.760    0.000    0.760    0.000 <string>:1(<genexpr>)
        1    0.000    0.000    1.111    1.111 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    0.351    0.351    1.111    1.111 {sum}



In [9]: cProfile.run('sum([number for number in xrange(9999999) if number % 2 == 0])')
         3 function calls in 1.123 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    1.075    1.075    1.123    1.123 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    0.048    0.048    0.048    0.048 {sum}

Ответы на вопрос(1)

Ваш ответ на вопрос