1. 我们可以对 list,tuple,dict等类型的数据使用for循环从其中依次拿取数据进行使用,我们把这样的过程称为遍历。也叫迭代。
可迭代对象: 把可以通过for循环迭代读取数据的对象称为可迭代对象。(都必须有 ‘__iter__’ 方法,即可迭代协议)
常见可迭代对象: str , list , tuple , set , dict , f1文件句柄 , itertor迭代器(迭代器也是可迭代对象)
dir(obj) 对象的所有操作方法
可迭代对象的 dir(obj)里都有‘__iter__‘这个方法,可以用来判断是否是可迭代的
if ‘__iter__’ in dir(obj)
通常如此判断: from collections import Iterable (Iterator)从模块引包
isinstance(obj , Iterable)
迭代器:
在对数据迭代使用的过程中,都有个带状态的对象来帮助我们记录数据访问的位置。我们把这个帮助我们进行迭代的对象叫做迭代器。
(卡qia子zi)
(迭代器必须有‘__iter__‘, ‘__next__‘ 方法,即迭代器协议) .__iter__() 返回迭代器自身, .__next__() 返回下一个值
迭代器优点: 1、节省内存空间 2、满足惰性机制 3、不会反复取值
附: try: ...... except: ....... 异常处理 (默认Exception 所有异常)
可迭代对象转化成迭代器:iterob.__iter__() console结果 iterator obj...
迭代器含有 __iter__ 、 __next__ 、 遵循迭代器协议
2. 生成器 一种特殊的迭代器。(自主构建的特殊迭代器)
python中,生成器是一次生成并返回一个对象(生成器对象,它是一个特殊的迭代器),可将其视为可恢复函数。
在python中有三种方式来构建生成器:
1. 通过生成器推导式 g = (lambda x: x*i for i in rang(4))
2. 通过生成器函数 yield语句 (相当于...continue + return + hold...)CRH
3. python内置函数或者模块提供(其实2,3两种本质上差不多,都是通过函数的形式生成,
只不过2是自己写的生成器函数,3是python提供的生成器函数而已)
通过生成器函数构建的话:
简单的说,就是在函数的执行过程中,yield语句会把你需要的对象返回给调用生成器的地方,然后退出函数,
下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用。
第一 : 函数中只要有 yield ,就是特殊函数,是生成器函数
第二 : 一个 yield 对应一个 __next__
for i in xxx : 这个过程,就是将(可迭代对象)(容器)(迭代器)(生成器)xxx 中的元素挨个拿出来给 i