13-迭代器&生成器
迭代器:
for循环可以循环的就是可迭代对象。
可迭代对象:str,list,tuple,dict,set,range
迭代器:文件句柄
可迭代对象:内部含有__iter__方法的对象。
可迭代对象就遵循可迭代协议
如何判断:
print("__item__" in dir(s))
from collections import Iterable
print(isinstance(s,Iterable))
ll = [1,2,3,4]
#可迭代对象转化成迭代器:可迭代对象.__iter__()
#迭代器也含有__iter__, __next__。遵循迭代器协议
print(ll.__iter__())
判断迭代器:
from collections import Iterator
print(isinstance(s,Iterator))
迭代器的好处:
1.节省内存空间。
2.满足惰性机制。
3.不能反复取值。
for 循环:
1.将可迭代对象转化成迭代器
2.内部使用__next__方法取值
3.运用了异常处理机制
生成器:
本质上就是迭代器
生成器的产生方式:
1.生成器函数构造
2.生成器推导式构造
3.数据类型的转化。
def func():
print(666)
print(777)
print(888)
yield 999
g = func()
1.函数中只要有yield那他就不是一个函数,而是一个人生成器。
2.g称作生成器对象
__next__和send功能一样。都是执行下一个,执行一次
send可以给上一个yield赋值
第一个取值只能使用__next__,不能使用send,最后一个yield不能接受值