Python的迭代器与可迭代对象

什么是迭代器?

简单来讲当一个Python对象实现了iter方法或getitem方法与next方法,那么它就是一个迭代器。

什么是可迭代对象?

只要对象实现了iter方法,那它就是一个可迭代对象。如果对象实现了getitem方法,则会变成一个可迭代对象。也就是说,迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器。

iter的作用:

  • 当解释器开始迭代对象时,会先检查对象是否实现了iter方法,如果实现了,就调用iter方法,返回当前对象的迭代器类的实例,获得一个迭代器。

  • 如果没有实现iter方法,但是实现了getitem方法,python会创建一个迭代器,尝试按顺序(从索引0开始)获取元素。

  • 如果都没有实现,python会抛出TypeError异常,通常会提示"object is not iterable" 。

next的作用:

  • 返回迭代器中的下一个可用元素
  • 如果没有元素,抛出StopIteration异常
  • 可迭代的对象必须实现iter方法,但不能实现next方法

通过方法判断迭代器与可迭代对象:

isinstance()函数是用来判断一个对象是否是一个已知的类型。isinstance()与type() 区别是,isinstance()会考虑继承关系。所以说,要判断两个类型是否相同推荐使用isinstance()。

collections.abc模块定义了一些抽象基类,它们可用于判断一个具体类是否具有某一特定的接口。结合isinstance()使用就可以判断对象是否为迭代器或可迭代对象

# Iterable用于判断对象是否为可迭代对象
# Iterator用于判断对象是否为迭代器
from collections.abc import Iterable, Iterator

lst = [x for x in range(10)]

gen = (x for x in range(10))

print(isinstance(lst, Iterable))
# True
print(isinstance(lst, Iterator))
# False
print(isinstance(gen, Iterable))
# True
print(isinstance(gen, Iterator))
# True
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容