【整理内容】具体如下:

先来看如下示例:
>>>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 "<stdin>", line 1, in <module>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 "<stdin>", line 1, in <module>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

首先,我们来看Python 2里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()。

[Python]range与xrange用法对比的更多相关文章

  1. python range() 和xrange()的区别

    Help on built-in function range in module __builtin__: range(...) range(stop) -> list of integers ...

  2. python range 和xrange

    对于这两个好像功能都差不多,这两个经常会被搞混,所以今天一定要把这个完全弄清楚. 首先我们看看range: range([start,] stop[, step]),根据start与stop指定的范围 ...

  3. python range函数的用法

    range 函数是Python内置函数.可创建一个整数列表,一般用在 for 循环中. 函数语法:range(start, stop[, step]) start: 计数从 start 开始.默认是从 ...

  4. python2中range和xrange的区别

    range和xrange用法相同,不同的是xrange不是生成一个序列,而是作为一个生成器,即生成一个取出一个 相对来说,xrange比range性能优化很多,因为不需要一下子开辟一块很大的内存,特别 ...

  5. python中xrange用法分析

    本文实例讲述了python中xrange用法.分享给大家供大家参考.具体如下: 先来看如下示例: >>> x=xrange(0,8) >>> print x xra ...

  6. python 内置函数range和xrange

    range range 是一种类型(type),它是一个数字的序列,而且是不可变的,通常用在for循环中. class range(stop)class range(start, stop [, st ...

  7. Python中的range和xrange区别

    range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. range示例: >>> r ...

  8. 【Python那些事儿之十】range()和xrange()

    by Harrison Feng in Python 无论是range()还是xrange()都是Python里的内置函数.这个两个内置函数最常用在for循环中.例如: >>> fo ...

  9. Python range() xrange()

    range 前面小节已经说明了,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. xrange用法与 range 完全 ...

随机推荐

  1. Java数据结构面试题,输出 最后一个 出现次数为1的字符

    今天去面试,遇到一个数据结构题,给定一个字符串,输出 最后一个 出现次数为1的字符 回来研究了下,代码如下: package com.pine.interview.test; import java. ...

  2. 听晴明老师从头讲React Native(原价399)百度云下载 百度网盘

    适用人群 能使用至少一门主流编程语言:有基本的面向对象的概念:最好有一些web相关的知识和概念. 课程概述 新颖.实用.详尽的ReactNative零基础课程,由国内权威的ReactNative中文网 ...

  3. java线程池原理

    在什么情况下使用线程池?     1.单个任务处理的时间比较短     2.将需处理的任务的数量大     使用线程池的好处:     1.减少在创建和销毁线程上所花的时间以及系统资源的开销     ...

  4. 数据库scheme设计(9.4 小结)

    通过这一章的内容,希望能够让大家明白一个道理,“数据库系统的性能不是优化出来的,更多的是设计出来的”.数据库Schema 的设计并不如很多人想象的那样只是一个简单的对象对应实现,而是一个系统工程.要想 ...

  5. treeview树(利用数据表实现)带展开

    Private Sub Form_Load()'引用C:\windows\system32\MSCOMCTL.OCX,否则提示出错. Dim Rec As New ADODB.Recordset Di ...

  6. 关于mysql保存数据的时候报问题分析  普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utstring value:'\xF0\x9F\x98\x82\xF0\x9F...' for ...

    问题分析 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战.避免 emoji 表情符号带来的问题 ...

  7. centos6-7克隆主机网卡无法启动问题

    1,centos6和redhat6左右的版本  第一,先找到网卡的mac地址,将其配置在配置文件中,重新启动网卡. 故障产生的原因: 由于克隆虚拟机,vmware只是修改了虚拟机的名字等信息,并没有修 ...

  8. Factory Method (工厂模式)

    什么是工厂设计模式 根据名字即可了解,工厂肯定是用来生产产品的,在我们的程序开发中,需要用到不同的类,对于熟悉SSH.SSM开发的可以知道,在初期学习的时候,总是有一个框架提供好的的factory供我 ...

  9. virtualenv 中 install flask 的小问题

    最经在学习Python flask 框架 ,用virtualenv建立好我的flask虚拟环境后,执行 sudo pip install flask 并没有报错 我以为已经装上了flask,但当我进入 ...

  10. android sqlite no such table

    今天在学习android SQLite出现android sqlite no such table错误提示,提示的意思我没有创建我要插入的表,网上也没有搜索一下,也尝试了,发现还是没有解决到我的问题, ...