前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python]range与xrange用法对比

[Python]range与xrange用法对比

作者头像
周小董
发布2019-03-25 18:09:45
1.5K0
发布2019-03-25 18:09:45
举报
文章被收录于专栏:python前行者python前行者

【整理内容】具体如下:

先来看如下示例: >>>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()。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年06月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档