簡體   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