为什么或者为什么不?
最佳答案
为了提高性能,尤其是在较大范围内进行迭代时,xrange()
通常更好。但是,在某些情况下,您可能更喜欢range()
:
range()
会执行xrange()
曾经执行的操作,而xrange()
不存在。如果要编写可在Python 2和Python 3上运行的代码,则不能使用xrange()
。 range()
实际上在某些情况下会更快-例如。如果多次重复相同的序列。 xrange()
每次都必须重建整数对象,但是range()
将具有真实的整数对象。 (但是,在内存方面,它的性能总是较差)。xrange()
在需要真实列表的所有情况下都不可用。例如,它不支持切片或任何列表方法。 [编辑]有几篇文章提到2to3工具将如何升级
range()
。作为记录,这是在range()
和xrange()
的一些用法示例上运行该工具的输出RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: ws_comma
--- range_test.py (original)
+++ range_test.py (refactored)
@@ -1,7 +1,7 @@
for x in range(20):
- a=range(20)
+ a=list(range(20))
b=list(range(20))
c=[x for x in range(20)]
d=(x for x in range(20))
- e=xrange(20)
+ e=range(20)
如您所见,在for循环或理解中使用时,或已用list()包装的位置,范围保持不变。
关于python - 您是否应该始终偏爱xrange()而不是range()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/135041/