In [2]: reversed(xrange(4))
Out[2]: <rangeiterator at 0x7fa83291bde0>
In [3]: list(reversed(xrange(4)))
Out[3]: [3, 2, 1, 0]
In [4]: reversed([0,1,2,3])
Out[4]: <listreverseiterator at 0x7fa8328be2d0>
In [5]: list(reversed([0,1,2,3]))
Out[5]: [3, 2, 1, 0]
reversed()
只有在使用泛型迭代器时才能获取序列,如果不耗尽迭代器并存储所有值,则无法知道最终值是什么。在幸运的是,
xrange
返回一个作为序列工作的xrange对象:它也碰巧有一个实际的
__reversed__
方法,但这是拥有所有序列方法的一个特例。在reversed()
在对象上查找^{xrange()
:迭代器对象只是反向生成值,不生成列表对象。在
对于不实现
^{pr2}$__reversed__
的对象,reversed()
函数使用长度和__getitem__
方法;例如reversed()
本质上等同于:其中第二部分是生成器表达式,计算比较迟缓。然后生成器依次从索引(长度-1)开始访问每个项,一直到索引0。在
比较一下这两者:
相关问题 更多 >
编程相关推荐