[英]How does the built-in function iter() convert a Python list to an iterator?
[英]How does iter() convert the list into the iterator object?
我知道iter()
函数将list
(或另一个集合)转换为迭代器对象。 但我不能完全理解迭代器对象是什么。
我读到它是无序数据,其中的每个元素(在调用__next__()
)分配给局部变量。但是计算机如何知道迭代器的哪个元素将是下一个?
迭代器对象将这些信息存储在其字段中。 像这样(我们假设我们的数组使用正常索引):
class IteratorObject:
def __init__(self, iterated_array) :
self.iterated = iterated_array
self.current_index = 0 # starting index is 0
def __iter__(self) :
return self # there isnt reason to create new iterator object - we will return existing one
def __next__(self) :
#if current_index is bigger that length of our array, we will stop iteration
if self.current_index >= len(self.iterated):
raise StopIteration() #this is exception used for stopping iteration
old_index = self.current_index
self.current_index += 1
return self.iterated[old_index
您可以看到迭代器对象具有存储当前索引( current_index
)的内部字段。 如果这个索引大于迭代数组的长度,我们将结束迭代(使用 StopIteration 异常)。
你可以以任何你想要的方式实现迭代器。 就像您可以拥有从数组末尾迭代到数组开头的迭代器一样-您只需要从最后一个索引开始并以 0 索引结束。
Tl; dr:迭代器是对象,就像每个对象一样,它有字段。 并且迭代器使用这些字段来存储有关迭代的信息
迭代器(带有__iter__
方法的对象)可以在 iter() 中使用。 有两种方法可以迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.