Why is there no xrange function in Python3?

后端 未结 6 1112
广开言路
广开言路 2020-11-28 00:46

Recently I started using Python3 and it\'s lack of xrange hurts.

Simple example:

1) Python2:

from time import time as t
def          


        
6条回答
  •  眼角桃花
    2020-11-28 01:26

    comp:~$ python Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2

    >>> import timeit
    >>> timeit.timeit("[x for x in xrange(1000000) if x%4]",number=100)
    

    5.656799077987671

    >>> timeit.timeit("[x for x in xrange(1000000) if x%4]",number=100)
    

    5.579368829727173

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=100)
    

    21.54827117919922

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=100)
    

    22.014557123184204

    With timeit number=1 param:

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=1)
    

    0.2245171070098877

    >>> timeit.timeit("[x for x in xrange(1000000) if x%4]",number=1)
    

    0.10750913619995117

    comp:~$ python3 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=100)
    

    9.113872020003328

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=100)
    

    9.07014398300089

    With timeit number=1,2,3,4 param works quick and in linear way:

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=1)
    

    0.09329321900440846

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=2)
    

    0.18501482300052885

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=3)
    

    0.2703447980020428

    >>> timeit.timeit("[x for x in range(1000000) if x%4]",number=4)
    

    0.36209142999723554

    So it seems if we measure 1 running loop cycle like timeit.timeit("[x for x in range(1000000) if x%4]",number=1) (as we actually use in real code) python3 works quick enough, but in repeated loops python 2 xrange() wins in speed against range() from python 3.

提交回复
热议问题