【发布时间】:2015-09-01 04:56:25
【问题描述】:
我需要创建一个类,它使用迭代器协议从数据流中一次返回一个字符,但它也有一个类似于文件对象的tell() 的方法,返回它当前在流。
基本上,这就是我需要的:
>>> x = MyIterator('abcdefghijklmnopqrstuvwxyz')
>>> x.tell()
0
>>> next(x)
'a'
>>> next(x)
'b'
>>> next(x)
'c'
>>> x.tell()
3
>>> next(x)
'd'
>>> x.tell()
4
最pythonic的方法是什么?我可以以某种方式使用生成器来做到这一点,还是必须创建一个“手动”实现迭代器协议的类? (即具有__next__() 方法的类,当数据用完时手动引发StopIteration)
请注意,这个问题有点简化了我的实际需求。我实际上需要tell()-analogue 来返回流位置的函数而不仅仅是位置,所以请不要告诉我“只是让我的迭代器的调用者使用enumerate()”或类似的东西。
【问题讨论】:
-
您也应该告诉我们您的实际需求,没有实际需求,我们只能提供简化版的解决方案。实际要求是否仍然只是一个字符串,就像您的简化版本中给出的那样?
-
我正在写一个反汇编程序。我正在反汇编的体系结构具有指令指针相关地址;要正确反汇编这些,有必要知道当前的 IP(这是流中位置的数学函数,但会根据被反汇编的图像而变化,所以我不能将其烘焙到反汇编器中)跨度>