显然xrange更快,但我不知道为什么它更快(除了目前为止的传闻之外,没有证据表明它更快),或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
显然xrange更快,但我不知道为什么它更快(除了目前为止的传闻之外,没有证据表明它更快),或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
当前回答
xrange使用迭代器(动态生成值),range返回一个列表。
其他回答
xrange只存储范围参数并根据需要生成数字。然而,Python的C实现目前将其args限制为C longs:
xrange(2**32-1, 2**32+1) # When long is 32 bits, OverflowError: Python int too large to convert to C long
range(2**32-1, 2**32+1) # OK --> [4294967295L, 4294967296L]
注意,在Python3.0中只有范围,它的行为类似于2.xxrange,但没有对最小和最大端点的限制。
根据扫描/打印0-N项的要求,range和xrange的工作原理如下。
range()-在内存中创建一个新列表,并获取整个0到N个项目(总共N+1个)并打印它们。xrange()-创建一个迭代器实例,该实例扫描项目并只将当前遇到的项目保存在内存中,因此始终使用相同的内存量。
如果所需的元素只是在列表的开头,那么它可以节省大量的时间和内存。
什么range在运行时返回静态列表。xrange返回一个对象(其作用类似于生成器,尽管它肯定不是一个),在需要时从中生成值。
什么时候使用哪个?
如果你想为一个巨大的范围生成一个列表,比如10亿,特别是当你有一个“记忆敏感系统”,比如手机时,可以使用xrange。如果要在列表中重复多次,请使用范围。
PS:Python 3.x的range函数==Python 2.x的xrange函数。
xrange返回一个迭代器,每次只在内存中保留一个数字。范围将整个数字列表保存在内存中。
range生成整个列表并返回它。xrange不——它根据需要生成列表中的数字。