栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python可迭代对象,迭代器,生成器傻傻分不清楚~

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python可迭代对象,迭代器,生成器傻傻分不清楚~

collections是一个包含了许多类型的module

from collections import Iterator,Iterable,Generator

1.可迭代对象iterable:

简单的理解是可以用for循环的对象,就是可迭代对象。比如:list,字符串,dict,元组,生成器等。
具有可迭代的特征
语法层面,如果一个对象实现了__iter__方法,那么这个对象就是可迭代对象
判断是否是可迭代对象(Iterable)
通过调用Python内置的isinstance来判断是否是Iterable的实例
In [9]: isinstance([],Iterable)
Out[9]: True

2.迭代器iterator

迭代器就是实现了迭代方式的容器,iterable对象一般只能按默认的正序方式进行迭代,你可以通过为其添加__next__()/next()方法来定制不同的迭代方式,这样通过next方法封装起来的迭代对象生成器就被称作迭代器。与iterable相比iterator多了一个next()方法,next()方法用于定制for循环时具体的返回值及返回顺序以及处理StopIteration异常等。
iterator必定是iterable的,因此其必然含有__iter__方法,此方法保证了iterator是可以迭代的,个人认为可以将__iter__()方法看做迭代器的入口,此入口告诉python对象是可for循环的,当你还为class定义了__next__方法时python的for循环会直接调用__next__()方法进行迭代,因此对于实现了__next__方法的迭代器来讲__iter__方法是一个不可或缺的鸡肋方法,不可或缺是因为他是可迭代的标识,鸡肋是因为他不会实质性的起作用,虽然他是迭代器的入口但却不是迭代的起始点,也因此iterator的__iter__方法可以随意返回self或者self.属性或者None。
使用isinstance(实体名,Iterator)可判断是否为迭代器

3.生成器generator

generator对象是一种特殊的iterator函数,它会在执行过程中保存执行的上下文环境,并在下次循环中从yield语句后继续执行,生成器的标志就是yield关键字。
generator不需要抛出StopIteration异常(你可以看做yield已经在内部实现了StopIteration跳出循环),函数并没有将序列项一次生成,所以generator在实现上可以有无穷个元素,而不需要无穷的存储空间,这在内存优化方面很有用处。
使用isinstance(实体名,Generator)可判断是否为生成器。
生成器的创建办法有两种:
通过函数创建,称作generator function
通过推导式创建,例如g=(x*2 for x in range(10)),称作generator expression

4.推导式

g=(x*2 for x in range(10))

5.其他的内置函数

filter:过滤函数
map:对指定序列做映射,例如都乘以2
zip:合并两个可迭代对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468631.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号