为什么或者为什么不?

最佳答案

为了提高性能,尤其是在较大范围内进行迭代时,xrange()通常更好。但是,在某些情况下,您可能更喜欢range():

  • 在python 3中,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/

    10-09 08:58