Я изучал генераторы Python и решил провести небольшой эксперимент.
TOTAL = 100000000
def my_sequence():
i = 0
while i < TOTAL:
yield i
i += 1
def my_list():
return range(TOTAL)
def my_xrange():
return xrange(TOTAL)
Использование памяти (с использованием psutil для получения информации о памяти процесса) и время, затраченное на использование time.time()), приведены ниже, после запуска каждого метода несколько раз и принятия среднего значения:
sequence_of_values = my_sequence() # Memory usage: 6782976B Time taken: 9.53674e-07 s
sequence_of_values2 = my_xrange() # Memory usage: 6774784B Time taken: 2.14576e-06 s
list_of_values = my_list() # Memory usage: 3266207744B Time taken: 1.80253s
Я заметил, что генератор с использованием xrange последовательно (немного) медленнее, чем при использовании урожая. Почему это так?