首页 / 操作系统 / Linux / Python中xrange和yield的用法
相信很多人对xrange和yield都不是很清楚,网上很多文章也是写的云里雾里的,今天我用最简单的例子给大家说下。说起xrange的时候就一定要提range,其实xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。>>> xrange(5)xrange(5)>>> list(xrange(5))[0, 1, 2, 3, 4]>>> xrange(1,5)xrange(1, 5)>>> list(xrange(1,5))[1, 2, 3, 4]>>> xrange(0,6,2)xrange(0, 6, 2)>>> list(xrange(0,6,2))[0, 2, 4]由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。xrange 和 range 这两个基本上都是在循环的时候用。for i in range(0, 100):
print ifor i in xrange(0, 100):
print i
这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:a = range(0,100)print type(a)print aprint a[6]<type "list">[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]5b = xrange(0,100)print type(b)print bprint b[6]<type "xrange">xrange(100)5总结:通过上面的实例我们可以知道python的xrange和range相比,不同点就在于xrange生成的不是一个数组,而是一个生成器。yield也是同样的道理,看实例1def spam(): yield 1 yield 2 yield 3print spam<function spam at 0x1006f5488>for item in spam(): print item123或者通过next()访问gen = spam()gen.next()gen.next()gen.next()123实例2def AlexReadLine():seek = 0while true:with open("temp.txt","r") as f:f.seek(seek)data = f.readline()if data: seek = f.tell() yield dataelse: returnprint AlexReadLine()
<generator object AlexReadLine at 0x1006f5488>
for item in AlexReadLine()
print item
hello
world 说明:只有在访问的时候才会打印数据用一个我工作用到的小实例来一起介绍下这两个生成器的使用:#encoding=utf=8def foo(l,n):for x in xrange(0,len(l),n):yield l[x:x+n]mm = range(21)for aa in foo(mm,3):print aa[0, 1, 2][3, 4, 5][6, 7, 8][9, 10, 11][12, 13, 14][15, 16, 17][18, 19, 20]CentOS上源码安装Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htmPython脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm在Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htmPython 语言的发展简史 http://www.linuxidc.com/Linux/2014-09/107206.htmPython 的详细介绍:请点这里
Python 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132215.htm