支持反推的迭代器



我正在寻找将常规迭代器转换为支持将项目推送回其中的原因。 例如

item = next(my_iterator)
if went_too_far(item):
    my_iterator.pushback(item)
    break;

这与支持 peek 的迭代器类似,但不完全相同;对于后者,上面的内容看起来更像这样:

if went_too_far(my_iterator.peek()):
    break
else:
    item = next(my_iterator)
class PushbackWrapper(object):
    def __init__(self, iterator):
        self.__dict__['_iterator'] = iterator
        self.__dict__['_pushed'] = []
    def next(self):
        if len(self._pushed):
            return self._pushed.pop()
        else:
            return self._iterator.next()
    def pushback(self, item):
        self._pushed.append(item)
    def __getattr__(self, attr):
        return getattr(self._iterator, attr)
    def __setattr__(self, attr, value):
        return setattr(self._iterator, attr, value)

要使用它:

pushback_enabled_iterator = PushbackWrapper(original_iterator)
item = next(pushback_enabled_iterator)
if went_too_far(item):
    pushback_enabled_iterator.pushback(item)
    break;

最新更新