Difference between Range and Xrange in Python
2015-11-18 15:13
627 查看
概述
之前在stackoverflow上看见一个答案描述Python中range与xrange的区别:range的返回值是一个list,包含所有范围内满足条件的元素;
而Xrange的返回值是一个xrange的Object,通过协程,在每次调用时运行一次生成下一个元素的对象。
(在文档中可以找到类似的表述)
也就是说range是一次生成所有元素并返回list,而xrange是在每次调用时生成一个;换言之,xrange对内存会更加友好。
举一个栗子
在了解这个答案后我的印象中一直认为xrange貌似要比range好一点,不过一直没有一个直观的印象。直到最近尝试做ProjectEuler的一个题:Highly divisible triangular number
无脑地直接写了一个暴力的解法:
triangular = 0 triangular_step = 0 def triangular_num(): global triangular_step, triangular # make step add 1, and figure out triangular num triangular_step += 1 triangular += triangular_step def divisor_num(digit): num = 0 for tmp in range(1, digit + 1): if digit % tmp == 0: num += 1 return num if __name__ == "__main__": while True: triangular_num() dn = divisor_num(triangular) with open('./out.txt', 'a') as f: f.write(str(triangular) + ' : ' + str(dn) + '\n') if dn > 500: break
运行时发现内存的使用量高达几百,并且很稳定地向上增长:
之后我将range改为xrange:
内存由此稳定在3.5M左右。
注与吐槽
说明一下,笔者使用的Python是2.7的版本,在Python3中range的功能已由xrange替换,所以你可以放心大胆地用range而不用担心内存的问题。吐槽:
笔者也想用Python3,python3中很多特性都非常好,不过无奈更新太频繁,很多组件都不支持。
学习中的一点小体会,写出来与大家分享一下。
相关文章推荐
- 折腾Ipython
- 第一个Python程序——博客自动访问脚本
- Python基础学习-爬虫小试2
- python插件
- Python学习小记
- 让cherrypy监听系统内所有活动网卡传入的请求
- python 远程操作ubuntu
- Python 创建函数和代码重用
- python数据类型详解
- Python基础练习
- Python pip安装
- python遍历数组的两种方法
- python类型判断
- Python——赋值语句
- python和numpy的版本、安装位置
- python 线程,GIL 和 ctypes
- python 第二天 条件语句的使用
- print函数输出(python)
- 机器学习实战python环境搭建以及numpy和matplotlib安装遇到的各种问题(一)
- Python变量类型