其实之前一直在使用这两个函数,但是至于究竟有什么区别也不是很清楚,因为平时用到的无非就是生成列表循环遍历这样的任务,所以就没有花时间去研究一下这个,今天看到一个题目考的就是二者的区别,索性就停下脚步,看看究竟有什么区别吧。

    也在网上查了一些资料,明天了二者的区别本质上就是:内存的使用差别

    range在我平时的工作中使用的更为频繁一点,自然更了解一下,使用最简单的range函数可以产生一个列表用于后续的处理,但是xrange返回的并不是一个列表,而是一个迭代器,这样做的好处就是节省了内存空间,试想一下如果我需要数以亿计的数字,那么单纯内存空间的消耗就是巨大的,而xrange采用迭代器的方法配合for循环的遍历效果等同于range的效果,这样你使用的时候是感觉不到任何的差别的。当然,节省了内存空间的确是xrange的一个优点但是缺点就是:生成的对象是迭代形式的,这样如果我们想要的记过是列表的话就不行了,这里有一个办法就是可以使用list方法直接将迭代器转化为列表的形式,不过个人建议是:如果平时的处理的数据量没有那么大,返回的结果又必须是列表形式的那么就直接使用range就行了,如果数据量很大,只是用于遍历循环这样的处理操作的话就直接使用xrange好了,下面给出来一个简单的测试使用的样例,用法都很简单,主要是关注与性能的差别,这也是二者的本质区别所在:


#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:python range与xrange的区别
'''import time
import mathdef test_func(num):''''''print '**************************************range******************************************'one=range(num)print 'range(num) is:', oneprint 'type(range(num)) is:', type(one)for i in one:print i print '**************************************xrange******************************************'two=xrange(num)print 'xrange(num) is:', twoprint 'type(xrange(num)) is:', type(two)for j in two:print j print '----------------------------------------时间消耗对比---------------------------------------'new=int(math.pow(num,7))start_time=time.time()one=range(new)end_time=time.time()two=xrange(new)end_time2=time.time()print 'range耗时为:', end_time-start_timeprint 'xrange耗时为:', end_time2-end_timedef simple_usage():'''range的用法很简单,下面是我经常用到的几种方法range(a,b,c)中,a、b、c分别代表了起始、终止位置和步长'''print range(10)print range(1,10,2)print range(0,10,2)print range(5,9)print range(10,-1,-1)print range(100,10,-10)if __name__ == '__main__':simple_usage()print '--------------------------------------------------------------------------------------------'test_func(10)

结果如下:


[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
[0, 2, 4, 6, 8]
[5, 6, 7, 8]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[100, 90, 80, 70, 60, 50, 40, 30, 20]
--------------------------------------------------------------------------------------------
**************************************range******************************************
range(num) is: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
type(range(num)) is: <type 'list'>
0
1
2
3
4
5
6
7
8
9
**************************************xrange******************************************
xrange(num) is: xrange(10)
type(xrange(num)) is: <type 'xrange'>
0
1
2
3
4
5
6
7
8
9
----------------------------------------时间消耗对比---------------------------------------
range耗时为: 10.971503973
xrange耗时为: 1.31130218506e-05


其中数据量为:十万级别的时间消耗如下:

--------------------------------------时间消耗对比-----------------------------------------------
range耗时为: 0.0350050926208
xrange耗时为: 8.10623168945e-06

从结果中可以看到:在数据量为百万级别的时候二者的差距已经是非常之大了,这里不考虑内存的消耗,从侧面看时间的消耗,正因为range是完整的开辟出来了一块完整的内存空间来产生结果数据的列表所以很耗时,而xrange只是产生了一个迭代器并没有开辟出这样的一块内存地址也没有产生这样的一个完整的结果数据的列表,所以速度很快,但是不可以单纯因为时间消耗的多少以及内存消耗的多少来评判其性能的优异,因为适用的场合以及你使用的场合和方法都是很重要的。

python之range与xrange使用区别相关推荐

  1. python中range和xrange的区别_ZH奶酪:Python中range和xrange的区别

    直观说明:http://ciniao.me/article.php?id=17 原因分析:http://blog.csdn.net/liangliyin/article/details/5980505 ...

  2. python中range和xrange的区别_python中range和xrange的区别

    range()是Python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列.xrange也有相同的功能, 今天来看下它们之间的不同. range 函数说明:range([start,] s ...

  3. Python中range与xrange的区别

    文档中对range与xrange的介绍如下: range([start], stop[,step]) This is a versatile function to create lists cont ...

  4. Python之range和xrange的区别

    range()是Python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列. xrange也有相同的功能, 今天来看下它们之间的不同. range 函数说明:range([start,] ...

  5. Python中range和xrange的区别

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

  6. Python range和xrange的区别和联系

    Python range和xrange的区别和联系 一言以蔽之 range产生的是一个列表,而xrange产生的是一个类似迭代器的. 所以对于较大的集合时候,xrange比range性能好. 因为ra ...

  7. python中range和arange的区别_Python——range()、xrange()和np.arange()应用说明

    (1)range()和xrange()函数在 python 2.x 版本中,同时存在range()和xrange()函数,其中,range()返回值是一个列表,xrange()返回值是一个迭代值: 在 ...

  8. python2中range和xrange的区别

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

  9. 【Python】range和xrange区别

    转自:http://www.cnblogs.com/zhangjing0502/archive/2012/05/16/2503880.html range     函数说明:range([start, ...

  10. Python中 range 和xrange的详细区别

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

最新文章

  1. Asp.net Dynamic Data之三改变编辑和操作数据的现实方式
  2. Gnu/Linux 链接XServer方法
  3. 《分布式操作系统》知识点(8~14)二
  4. C语言有参函数调用时参数间数据传递问题
  5. 什么是计算机应用上机报告,计算机应用实验报告样本.doc
  6. 深度学习——初识TensorFlow
  7. 《 Oracle 10g-11g XTTS迁移方案》.pdf
  8. 【clickhouse】docker 下 搭建 clickhouse 监控
  9. 设计师应该知道的配色工具,有效提高效率和审美
  10. 服务器本地文件传输,服务器 本地 文件传输
  11. centos 7 更换yum源
  12. 什么是pdi检测_为什么国人买车钟爱白色?这几点购车陷阱不要踩
  13. 阅读圣经丨变量引起的上下文
  14. P3369 【模板】普通平衡树(fhq treap)
  15. RouterPassView – 路由密码查看器
  16. 人这一辈子,渡你的只有两个人
  17. 更完美 联想乐Phone获取root权限教程
  18. 查找中位数(分治策略)
  19. 好的商城系统都是这个样子的
  20. FPGA作为从机与STM32进行SPI协议通信

热门文章

  1. Spring入门之IOC
  2. 又一个统计浏览器历史纪录的扩展,支持 Firefox/Chrome
  3. 什么是git subcommand,如何创建git子命令?
  4. UIApplication深入学习 调用程序开自身软件 发短信 打电话等
  5. SQLServer 2008数据库查看死锁、堵塞的SQL语句
  6. 2010.2--ip redirects 和 ip directed-broadcast含义
  7. ZooKeeper 初体验
  8. es6基础(4)--字符串扩展
  9. [hiho1160] 攻城略地
  10. ASP.NET-Request对象