您现在的位置是:亿华云 > 数据库
Python 可迭代的对象与迭代器的对比
亿华云2025-10-03 06:16:02【数据库】5人已围观
简介什么是迭代?迭代是指按需一次获取一个数据。是否可以迭代,可以通过是否可以使用for循环取值来进行简单的判断。更准确的判断是使用iter()函数,这是一个Python内置函数。可迭代的对象iter()函
什么是可迭迭代?迭代是指按需一次获取一个数据。是代的对象迭代对比否可以迭代,可以通过是可迭否可以使用for循环取值来进行简单的判断。更准确的代的对象迭代对比判断是使用iter()函数,这是可迭一个Python内置函数。
可迭代的代的对象迭代对比对象
iter()函数的作用如下:
如果对象实现了__iter__方法,那么就调用它,可迭获取一个迭代器。代的对象迭代对比比如:
def __iter__(self): return SentenceIterator(self.words)如果对象没有实现__iter__但是可迭实现了__getitem__方法,那么就创建一个迭代器,代的对象迭代对比尝试从索引0开始获取元素。可迭
如果尝试获取元素失败,代的对象迭代对比就会抛出TypeError异常。可迭
可迭代的代的对象迭代对比对象,就是亿华云计算可迭使用iter()函数判断,满足前面2点的对象。
任何Python序列都是可以迭代的,因为它们都实现了__getitem__方法。
迭代器
从前面iter()函数的作用可以发现,迭代器是从可迭代的对象中获取的。
如果对象本身是可迭代的,就调用__iter__方法获取一个迭代器。
如果对象不可迭代但是实现了__getitem__方法,那么就会创建一个迭代器。
比如可以使用iter()函数把列表转换为迭代器:
>>> test_list = [1, 2, 3] >>> print(type(test_list)) <class list> >>> test_iter = iter(test_list) >>> print(type(test_iter)) <class list_iterator>迭代器可以使用for循环遍历:
for x in test_iter: print(x)也可以使用while循环遍历:
while True: try: print(next(test_iter)) except StopIteration: del test_iter break next()函数用于获取迭代器下一个元素。 没有元素了,迭代器会抛出StopIteration异常。标准的迭代器接口有两个方法:
__next__返回下一个元素。 __iter__返回self,以便在应该使用可迭代对象的地方使用迭代器,比如for循环中。 def __iter__(self): return self迭代器的准确定义是:迭代器是这样的云服务器提供商对象,它实现了无参数的__next__方法,返回序列中的下一个元素;如果没有元素了,那么抛出StopIteration异常。Python中的迭代器还实现了__iter__方法,因此迭代器也是可以迭代的。
最后,通过对比可以发现,可迭代对象的__iter__返回的是迭代器:
def __iter__(self): return SentenceIterator(self.words)迭代器的__iter__返回的是self:
class SentenceIterator: def __iter__(self): return self而且迭代器还需要有__next__方法。
从这一点就能清楚看出它们的区别了。
需要特别注意的是,可迭代的对象一定不能是自身的迭代器,也就是说,可迭代对象必须实现__iter__方法,但是亿华云不能实现__next__方法。否则会让设计模式变得混乱不堪。
参考资料:
《流畅的Python》第14章 可迭代的对象、迭代器和生成器
https://www.runoob.com/python3/python3-iterator-generator.html
很赞哦!(6)