Вы найдете преимущество xrange
над range
в этом простом примере:
import timeit
t1 = timeit.default_timer()
a = 0
for i in xrange(1, 100000000):
pass
t2 = timeit.default_timer()
print "time taken: ", (t2-t1) # 4.49153590202 seconds
t1 = timeit.default_timer()
a = 0
for i in range(1, 100000000):
pass
t2 = timeit.default_timer()
print "time taken: ", (t2-t1) # 7.04547905922 seconds
В приведенном выше примере ничего лучше не отражается в случае xrange
.
Теперь рассмотрим следующий случай, когда range
действительно очень медленный по сравнению с xrange
.
import timeit
t1 = timeit.default_timer()
a = 0
for i in xrange(1, 100000000):
if i == 10000:
break
t2 = timeit.default_timer()
print "time taken: ", (t2-t1) # 0.000764846801758 seconds
t1 = timeit.default_timer()
a = 0
for i in range(1, 100000000):
if i == 10000:
break
t2 = timeit.default_timer()
print "time taken: ", (t2-t1) # 2.78506207466 seconds
С range
он уже создает список от 0 до 100000000 (отнимает много времени), но xrange
является генератором, и он генерирует числа только на основе потребности, то есть, если итерация продолжается.
В Python-3 реализация функциональности range
такая же, как и у xrange
в Python-2, хотя они покончили с xrange
в Python-3
Удачного кодирования!