专栏首页python前行者[Python]range与xrange用法对比

[Python]range与xrange用法对比

【整理内容】具体如下:

先来看如下示例: >>>x=xrange(0,8) >>> print x xrange(8) >>>print x[0] 0 >>>print x[7] 7 >>>print x[8] Traceback (most recent call last):File “”, line 1, in IndexError: xrange object index out of range >>> x=range(0,8) >>> print x [0, 1, 2, 3, 4, 5, 6, 7] >>> print x[0] 0 >>> print x[8] Traceback (most recent call last):File “”, line 1, in IndexError: list index out of rangerange([start,] stop [,step])->list of integers


range(start, stop, step)返回一个递增或递减的数字列表,列表的元素值由三个参数决定: start表示列表开始的值,可省,默认为“0” stop表示列表结束的值,该参数不可缺少 参数step表示步长,可省,默认值为“1” range返回的是一个列表,一次性计算并返回所有的值 xrange是一个类,返回的是一个生成器: 生成器是一个可迭代对象,在对生成器进行迭代时,元素是逐个被创建的 使用xrange()进行遍历,每次遍历只返回一个值 一般来看,在对大序列进行迭代的时候,因为xrange的特性,所以它会比较节约内存 因此,xrange的执行效率要高于range

首先,我们来看Python2里range()。它是一个内置函数,这个函数用于创建整数等差数列。因此它常被用于for循环。

从官方帮助文档,我们可以看出下面的特性: 1、内置函数(built-in) 2、接受3个参数分别是start, stop和step(其中start和step是可选的,stop是必需的) 3、如果没有指定start,默认从0开始(python都是从0开始的) 4、如果没有指定step,默认step是1。(step不能是0,如果指定step为0,“ValueError: range() step argument must not be zero”将会被抛出)

接下来看看xrange()。 xrange()虽然也是内置函数,但是它被定义成了Python里一种类型(type),这种类型就叫xrange。我们从Python 2的interactive shell里很容易看到这点。

我们从xragne的官方帮助文档可以看出:

xrange和range的参数和用法是相同的。只是xrange()返回的不再是一个数列,而是一个xrange对象。这个对象可以按需生成参数指定范围内的数字(即元素)。 由于xrange对象是按需生成单个的元素,而不像range那样,首先创建整个list。所以,在相同的范围内,xrange占用的内存空间将更小,xrange也会更快。 实际上,xrange由于是在循环内被调用时才会生成元素,因此无论循环多少次,只有当前一个元素占用了内存空间,且每次循环占用的都是相同的单个元素空间。 我们可以粗略的认为,相同n个元素的话,range占用的空间是xrange的n倍。因此,在循环很大情况下,xrange的高效率和快速将表现的很明显。


总结: 1、range()返回整个list。 2、xrange()返回的是一个xrange object,且这个对象是个iterable。 3、两者都可用于for循环。 4、xrange()占用更少的内存空间,因为循环时xrange()只生成当前的元素,不像range()一开始就成生成完整的list。

这就是在Python 2里range和xrange的相同点和区别。

range()和xrange() 在Python 2里是两种不同的实现。但是在Python 3里,range()这种实现被移除了;保留了xrange()的实现,且将xrange()重新命名成range()。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [802]linux修改文件或目录的所有者(chown)和用户组(chgrp)

    文件或目录的用户组更改,注意:要更改的用户组,必须存在于“/etc/group”下

    周小董
  • Ubuntu——安装和卸载谷歌Chrome浏览器

    对于刚刚开始使用Ubuntu并想安装谷歌Chrome浏览器的新用户来说,本文所介绍的方法是最快捷的。在Ubuntu上安装谷歌Chrome的方法有很多。一些用户喜...

    周小董
  • python selenium模拟滑动操作

    quit()方法会退出浏览器,而close()方法只是关闭页面,但如果只有一个页面被打开,close()方法同样会退出浏览器

    周小董
  • Python xrange 与 rang

    range可以返回一个可以用于所有目的的普通列表对象,而xrange将返回一个特殊目的的对象,尤其适用于迭代操作,但是xrange并不返回一个迭代器,如果需要这...

    py3study
  • Python xrange与range的

    原文地址:http://www.nowamagic.net/academy/detail/1302446

    py3study
  • 大数据24小时 |“刷脸”、“刷眼”到“点头支付”,蚂蚁金服玩出移动支付“新姿势”

    <数据猿导读> IP剧崛起引资本热潮,基于云端大数据的影视传媒公司“云端传媒”获亿元融资;阿里云再”探“太空,与国家天文台合作,共建天文大数据联合研究中心;财税...

    数据猿
  • 读了140000个灵ཀ异ཀ帖ཀ子ཀ,MIT想教AI写恐ཀ怖ཀ故ཀ事ཀཀཀ

    安妮 编译自 QUARTZ 量子位 出品 | 公众号 QbitAI 最可怕的故事可能就藏在你的脑海里,或者在夜晚的Reddit论坛上。 21号,当MIT媒体实验...

    量子位
  • 从Hybrid到React-Native: JS在移动端的南征北战史

    其实写这篇文章的时候,我就知道,肯定有人问我:为什么不写flutter?抱歉了,flutter的大名我当然知道,可我只是一个写JS的,同时了解一些Java的知识...

    外婆的彭湖湾
  • NameError: name 'xrange' is not defined

    于小勇
  • 投融资汇总|本周(7.14-7.20),矿区无人化赛道现最大融资记录

    本周硬科技领域投融资事件一共51起,人工智能领域发生20起融资事件和2起收购事件,占比43%;生物医药领域发生10起融资事件和1起收购事件,占比21%;区块链领...

    镁客网

扫码关注云+社区

领取腾讯云代金券