cfnr.net
当前位置:首页 >> python3为什么取消了rAngE生成器 >>

python3为什么取消了rAngE生成器

生成器能够节约空间, 而且效率高 如果你遍历文件, 几万甚至几十几百万文件, 还是yield来的更方便呀, list什么的浪费空间. 如果是直接生成list, 完全可以用推导式 [i for i in range(10)]list(range(10))

不是取消了xrange,而是取消了range,同时将xrange重新命名成range.如果希望生成原来的列表形式的range,只要用list(range())就可以了.

因为python3已经可以直接比较大小了,不需要用cmp方法.比如:a=[1,2,3]b=[2,3,4]a>bOut[6]: Falsea 评论0 0 0

import itertoolsfor i in itertools.count( ): print( i ) if i > 10 : break

1. 首先这两个基本上都是在循环的时候用.这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:而xrange则不会直接生成一个list,而是每次调用返回其中的一个值【xrange返回的是一个生成器】.所以xrange做循环的性能比range好,尤其是返回很大的时候!尽量用xrange吧,除非你是要返回一个列表.2. 其次python3中已经用xrange替换了range,所以在2切换到3中需要注意,另外,值得一提的是xrange不支持切片

python3没有 xrangepython3 的 range 和2以前的 xrange 功能一致,都是生成器.所以直接用 range 就可以了.

是的,我的2.7.3返回是>>> range(1,5)[1, 2, 3, 4]

因为range()函数返回的是生成器对象生成器对象直接打印出不来内容,只会返回对象信息想要看生成器具体会产生什么,两个方法:用for循环遍历生成器,或者用list,tuple转换.对所有生成器都适用.>>> a = range(5)>>> arange(0, 5)>>> isinstance(a, range)True>>> for i in a: print(i)01234>>> arange(0, 5)>>> list(a)[0, 1, 2, 3, 4]>>> tuple(a)(0, 1, 2, 3, 4)

比如range(1, 10, 2) 生成器列表是[1, 3, 5, 7, 9] 第三个参数就是步长,默认为1,可以看做是跳过(步长-1)个输出一次.如果是负数,则是反向减去,比如range(10, 1, -2),输出[10, 8, 6, 4, 2]

range返回的是一个包含所有元素的列表,xrange返回的是一个生成器,生成器是一个可迭代对象,在对生成器进行迭代时,元素是逐个被创建的.一般来看,在对大序列进行迭代的时候,因为xrange的特性,所以它会比较节约内存.我们来仔

网站首页 | 网站地图
All rights reserved Powered by www.cfnr.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com