В Python существуют две, аналогичные с виду фунцкции: range и xrange, которые часто используются в циклах for. Обе они имеют сходный синтаксис:
range(start,stop,step) или xeange(start,stop,range). Где start,stop и step соответственно: начальное, конечное значения и шаг. Однако, если range возвращает список значений (list), xrange возвращает объект, что более эффективно использует память и более производительно в циклах.
Вот пример скрипта, демонстрирующий разницу в производительности (для сравнения еще и цикл while):
#!/usr/bin/python
def test_range(rng):
for i in range(rng): pass
def test_xrange(rng):
for i in xrange(rng): pass
def test_while(rng):
i=0
while i<=rng:
i=i+1
if __name__=='__main__':
from timeit import Timer
testing_range=(100,1000,10000,100000,1000000,4000000)
print "%7s %10s %16s %16s"%('Size','Range','XRange','While')
for rng in testing_range:
t_range=Timer('test_range(%i)'%rng,'from __main__ import\ test_range').timeit(number=1)*1000000
t_xrange=Timer('test_xrange(%i)'%rng,'from __main__ import\ test_xrange').timeit(number=1)*1000000
t_while=Timer('test_while(%i)'%rng,'from __main__ import\ test_while').timeit(number=1)*1000000
print "%7d\t %9.2f\t %9.2f\t %9.2f\t"%(rng,t_range,t_xrange,t_while)
И вот резальтат вывода:
Size Range XRange While100 17.17 10.97 20.98
1000 82.97 59.84 221.97
10000 1345.16 559.09 2100.94
100000 9470.94 5361.08 18620.01
1000000 100019.93 57285.07 189877.99
4000000 389897.11 237751.96 779174.09
1 комментарий:
Насколько я понял xrange убрали ...
Python 3.1.2 (release31-maint, Sep 17 2010, 20:27:33)
[GCC 4.4.5] on linux2
>>> for i in xrange(5): pass
...
Traceback (most recent call last):
File "", line 1, in
NameError: name 'xrange' is not defined
Отправить комментарий