在Python中for循环的迭代之后执行next()



我有一个数据类从某个源读取数据。我为这个类制作了__iter____next__方法,以便能够循环通过它:

def __iter__(self):
# Return to the first entry, if it is not the current one
if self._tree.GetReadEntry() != 0:
self._tree.GetEntry(0)
return self
## The next() method for iteration
def __next__(self):
current_entry = self._tree.GetReadEntry()
# If reading an entry after the last, raise an exception
if current_entry == self._tree.GetEntries() - 1:
raise StopIteration
# Read the next entry
self._tree.GetEntry(current_entry + 1)
# Return self, as all values are accessed through self
return self

问题是for循环在一开始就调用next()。因此,我从源代码中读取条目1开始,而不是条目0。我知道我可以设置一些变量来检查它是否是第一次迭代,在这种情况下,获取条目0,如果不是,则获取下一个条目,但我想知道是否有更合适的方法在类中执行此操作,而无需修改循环以手动调用next()等。

解决这个问题的方法是将类从迭代器更改为可迭代的,如本主题中所建议的。通过这种方式,for循环获得的第一个值是来自数据源的第一个条目。我不知道用迭代器做这件事的方法。

相关内容

  • 没有找到相关文章