繁体   English   中英

如何在Python中实现测距仪?

[英]How is a rangeiterator implemented in Python?

>>> reversed(xrange(100))
<rangeiterator object at 0xb72aab78>
>>> it = reversed(xrange(100)).__iter__()
>>> it
<rangeiterator object at 0xb72aa4d0>
>>> next(it)
99

我怎样才能在Python中实现这样的东西? 为了更具特色,我怎样才能制作一个迭代器,如果没有它在内存中的列表被反转之前可以颠倒呢?

基本上,您在集合上实现__reversed__ magic方法

xrange的逻辑如下:

def __reversed__(self):
    return iter(xrange(stop - 1, start - 1, step * -1))

没有技巧 - 您需要知道如何生成反向迭代器。 Python不会为你做这件事。

如果你的迭代器实现的方法__reversed__()这将通过内建的使用reversed() xrange()返回执行该操作的迭代器。

reversed将适用于两种类型的对象:

  • 序列(例如list
  • 一个带有__reversed__魔术方法的迭代器

如果你有一个自定义序列,并且你可以使用该序列的len() ,你就可以了 - 否则,你需要添加__len__魔术方法; 如果你不能(例如,因为长度不知道),那么你不能懒洋洋地扭转它。

如果你有一个自定义迭代器,那么确保它有__reversed__魔术方法: __reversed__必须返回一个倒退的新迭代器; 再次,如果你不能提供一个(例如因为长度未知),那么你不能懒洋洋地逆转它。

注意 :有关创建自定义迭代的更多信息,请参阅此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM