Mam następujący kod w Pythonie:Python Generator, który daje więcej wyników zajmuje więcej czasu, aby stworzyć
import time
import sys
def returnlist(times):
t = time.time()
l = [i for i in range(times)]
print "list: {}".format(time.time() - t)
return l
def returngenerator(times):
t = time.time()
g = (i for i in range(times))
print "generator: {}".format(time.time() - t)
return g
g = returngenerator(times)
l = returnlist(times)
1.W razy = 1000000 uzyskać wyniki:
generator: 0.107323884964
lista: 0,225493192673
2.Dla razy = 10000000 otrzymuję :
generator: 0,856524944305
lista: 1,83883309364
rozumiem dlaczego 2nd lista zajęłoby więcej czasu, aby stworzyć ale dlaczego 2nd generator zająć więcej czasu, jak również? Zakładałem, że ze względu na leniwą ocenę stworzenie tego pierwszego czasu zajęłoby mniej więcej tyle samo czasu.
Używam tego programu na zasadzie Ubuntu VM
Czy używasz Pythona 2? Jeśli tak, użyj 'xrange' zamiast' range'. – Carsten
@Carsten ma całkowicie rację, powody, dla których jest to wolniejsze w pythonie-2, polega na tym, że 'zasięg' stał się leniwy (to znaczy zwraca generator) z pythonem-3, zanim ocenił pełną listę. –
Więc biorę to, że nigdy nie powinienem używać range() w generatorach bulding. Czy użycie range() oznacza, że za każdym razem, gdy ma zostać zwrócona nowa wartość generatora, należy ponownie utworzyć całą listę range()? – GeorgeG