对于性能,尤其是在大范围迭代时,xrange()
通常更好.然而,仍然有一些情况下你可能更喜欢range()
:
在Python3中,range()
做xrange()
以前做的事情,而xrange()
不存在.如果您想编写同时在Python2和Python3上运行的代码,就不能使用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循环或comprehension中使用时,或者在已经用list()包装的地方,range保持不变.