【发布时间】:2014-07-09 01:51:07
【问题描述】:
好的,所以我的实际代码有些复杂,但我用以下示例代码说明了我遇到的问题:
我有一个类,它有一个列表作为其实例变量之一。我希望该类是可迭代的,并在 for 循环中调用 next 时返回列表中的下一个元素。
所以我有如下:
class SimplaWannaBeIteratable(object):
def __init__(self, list_to_iter, **kwargs)
self._list = list_to_iter
self._item = None
#... other code to initialize
def __iter__(self):
return self
def next(self):
self._item= next(self._list)
return self._item
def current(self):
#So that other uses cases have the access to the current member
return self._current
但是,如果我执行以下操作:
iter_item = SimplaWannaBeIteratable([1,2,3,4,5])
for item in iter_item:
return item
我明白了:
列表对象不是迭代器。
如果我将下一个更改如下:
def next(self):
self._item= next(iter((self._list)))
return self._item
我得到无限输出。
谁能告诉我我需要做什么才能完成我想做的任务以及为什么上面的代码不起作用? 根据我的理解,每次 next 被称为与列表关联的迭代器对象被调用,它的 next 是 return。那么为什么我的列表找不到它的迭代器呢?
【问题讨论】:
-
如果列表项发生变化,您将不得不使用不同的方法来检查这些值。例如,维护您的迭代器当前所在的索引并访问列表中的第 index 个值并递增。这完全取决于您打算如何使用它。