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不能接受值

 

posted @ 2018-04-03 21:37  kuoiea  阅读(154)  评论(0)    收藏  举报