显然xrange更快,但我不知道为什么它更快(除了目前为止的传闻之外,没有证据表明它更快),或者除此之外还有什么不同

for i in range(0, 20):
for i in xrange(0, 20):

当前回答

对于范围(..)/xrange(..)的较小参数,差异减小:

$ python -m timeit "for i in xrange(10111):" " for k in range(100):" "  pass"
10 loops, best of 3: 59.4 msec per loop

$ python -m timeit "for i in xrange(10111):" " for k in xrange(100):" "  pass"
10 loops, best of 3: 46.9 msec per loop

在这种情况下,xrange(100)的效率仅提高约20%。

其他回答

什么range在运行时返回静态列表。xrange返回一个对象(其作用类似于生成器,尽管它肯定不是一个),在需要时从中生成值。

什么时候使用哪个?

如果你想为一个巨大的范围生成一个列表,比如10亿,特别是当你有一个“记忆敏感系统”,比如手机时,可以使用xrange。如果要在列表中重复多次,请使用范围。

PS:Python 3.x的range函数==Python 2.x的xrange函数。

一定要花一些时间阅读图书馆参考资料。你越熟悉它,就越能更快地找到类似问题的答案。特别重要的是关于内置对象和类型的前几章。

xrange类型的优点是xrange对象总是使用相同数量的内存,无论它代表的范围大小如何。没有一致的性能优势。

另一种快速查找Python构造信息的方法是docstring和help函数:

print xrange.__doc__ # def doc(x): print x.__doc__ is super useful
help(xrange)

range:-range将一次填充所有内容。这意味着范围中的每个数字都将占用内存。

xrange:xrange有点像生成器,当你想要数字的范围,但你不希望它们被存储时,它就会出现在图片中,就像你想使用for loop时一样。

每个人都对它进行了大量的解释。但我想让它自己看。我用蟒蛇。因此,我打开了资源监视器(在Windows!中),首先执行了以下命令:

a=0
for i in range(1,100000):
    a=a+i

然后检查“正在使用”内存中的更改。这是微不足道的。然后,我运行了以下代码:

for i in list(range(1,100000)):
    a=a+i

它立即占用了大量内存。我确信。你可以自己试试。

如果您使用的是Python 2X,那么在第一段代码中,将“range()”替换为“xrange()”,将“list(range())”替换成“range()”。

xrange使用迭代器(动态生成值),range返回一个列表。