• 【Python 中的 range() 与 xrange()】


    在这里插入图片描述

    🤵‍♂️ 个人主页@老虎也淘气 个人主页
    ✍🏻作者简介:Python学习
    🐋 希望大家多多支持我们一起进步!😄
    如果文章对你有帮助的话,
    欢迎评论 💬点赞👍🏻 收藏 📂加关注

    **range() 和 xrange() 是两个函数,**可用于在 Python的 for 循环中迭代一定次数。在 Python 3 中,没有 xrange,但 range 函数的行为类似于 Python 2 中的 xrange。如果要编写可在 Python 2 和 Python 3 上运行的代码,则应使用 range()。

    range() – 这将返回一个范围对象(一种可迭代的类型)。
    xrange() – 此函数返回生成器对象,该生成器对象只能通过循环来显示数字。唯一的特定范围是按需显示的,因此称为“惰性评估”。

    两者都以不同的方式实现,并具有与之相关的不同特征。比较点如下:

    返回类型
    记忆
    操作使用
    速度

    返回类型

    range() 返回 -范围对象。
    xrange() 返回 – xrange() 对象。

    # 基于返回类型演示 range() 与 xrange() 的 Python 代码
    
    # 用 range() 初始化 a
    a = range(1,10000)
    
    # 用 xrange() 初始化 a
    x = xrange(1,10000)
    
    # 测试 a 的类型
    print ("The return type of range() is : ")
    print (type(a))
    
    # 测试 x 的类型
    print ("The return type of xrange() is : ")
    print (type(x))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出:

    The return type of range() is : 
    <type 'list'>
    The return type of xrange() is : 
    <type 'xrange'>
    
    • 1
    • 2
    • 3
    • 4

    记忆

    与使用 xrange() 存储范围的变量相比,存储由range () 创建的范围的变量占用更多内存。 其基本原因是 range() 的返回类型是 list 而 xrange() 是 xrange() 对象。

    # 基于内存演示 range() 与 xrange() 的 Python 代码
    
    import sys
    
    # 用 range() 初始化 a
    a = range(1,10000)
    
    # 用 xrange() 初始化 a
    x = xrange(1,10000)
    
    # 测试 range() 的大小需要更多内存
    print ("The size allotted using range() is : ")
    print (sys.getsizeof(a))
    
    # 测试 x xrange() 的大小占用更少的内存
    print ("The size allotted using xrange() is : ")
    print (sys.getsizeof(x))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出:

    The size allotted using range() is : 
    80064
    The size allotted using xrange() is : 
    40
    
    • 1
    • 2
    • 3
    • 4

    操作使用

    由于 range() 返回列表,因此可以在列表上应用的所有操作都可以在其上使用。另一方面,由于 xrange() 返回 xrange 对象,与 list 关联的操作不能应用于它们,因此是不利的。

    # 根据操作使用情况演示 range() 与 xrange() 的 Python 代码
    
    # 用 range() 初始化 a
    a = range(1,6)
    
    # 用 xrange() 初始化 a
    x = xrange(1,6)
    
    # 在 range() 打印上测试 slice 操作的使用没有错误
    print ("The list after slicing using range is : ")
    print (a[2:5])
    
    # 在 xrange() 上测试切片操作的使用会引发错误
    print ("The list after slicing using xrange is : ")
    print (x[2:5])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    错误:

    Traceback (most recent call last):
      File "1f2d94c59aea6aed795b05a19e44474d.py", line 18, in 
        print (x[2:5])
    TypeError: sequence index must be integer, not 'slice'
    
    • 1
    • 2
    • 3
    • 4

    输出:

    The list after slicing using range is : 
    [3, 4, 5]
    The list after slicing using xrange is : 
    
    • 1
    • 2
    • 3

    Speed

    由于 xrange() 仅评估仅包含惰性评估所需值的生成器对象,因此在实现上比 range()更快。
    要点:

    如果您想编写可在 Python 2 和 Python 3 上运行的代码,请使用 range(),因为 xrange 函数在 Python 3 中已弃用。
    如果多次迭代相同的序列,range() 会更快。
    xrange() 每次都必须重建整数对象,但 range() 将具有真正的整数对象。(然而,它在内存方面的表现总是更差)

    作者:海拥
    链接:https://juejin.cn/post/7147346127396798472
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    range()xrange()
    返回整数列表。返回一个生成器对象。
    执行速度较慢执行速度更快。
    占用更多内存,因为它将整个元素列表保留在内存中。占用更少的内存,因为它一次只在内存中保留一个元素。
    所有算术运算都可以在返回列表时执行。此类操作不能在 xrange() 上执行。
    在 python 3 中,不支持 xrange()。在 python 2 中,xrange() 用于迭代 for 循环。

    在这里插入图片描述

  • 相关阅读:
    一文带你搞懂OAuth2.0
    Python3 输出格式美化
    AcWing第 70 场周赛题解
    一文简述AI自动化漏洞修复实践
    C++基础知识
    Win11系统C++将ONNX转换为engineer文件,TensorRT加速推理
    国内做SRM系统的公司哪家比较好?如何利用SRM系统管理好供应商?
    vue-admin-template改变接口地址
    Dev 使用汇总
    GEE——自GLDAS-2.0 每日流域模型批量导出逐月Terrestrial water storage水存量影像下载
  • 原文地址:https://blog.csdn.net/m0_66106755/article/details/127794705