Python-你是否应该始终偏爱xrange()而不是range()?

发布于 2021-02-02 23:15:55

为什么或者为什么不?

关注者
0
被浏览
78
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    对于性能而言,尤其是在较大范围内进行迭代时,xrange()通常会更好。但是,在某些情况下,你可能更喜欢range()

    • 在Python 3,range()做什么xrange()用做的,xrange()不存在。如果要编写可在Python 2和Python 3上运行的代码,则不能使用xrange()

    • range()在某些情况下实际上可以更快-例如。如果多次重复相同的序列。 xrange()每次都必须重新构造整数对象,但是range()将拥有真正的整数对象。(但是,在内存方面,它总是会表现得更差)

    • xrange()在需要真实列表的所有情况下都不可用。例如,它不支持切片或任何列表方法。

    [编辑]有range()几篇文章提到2to3工具将如何升级。为了记录在案,这里是对一些用法示例运行该工具的输出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()包装的地方,范围保持不变。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看