python学习--day14(迭代器和生成器)

1.可迭代对象
(1)只要包含了‘双下iter’(_iter_)方法的数据类型就是可迭代的--可迭代协议。
(2)协议就是数据类型和python解释器定下的协议
(3)可迭代对象使用_iter_功能后得到的结果就是一个迭代器。例如:lst1=[1,2,3]._iter_()  lst1就变成了一个迭代器
2.迭代器
就是实现能从其中一个一个的取出值来
迭代器中有_next_ 和_iter_——迭代器协议
在python中所有能可以被for循环的的基本数据类型,都是可迭代对象,而不是 迭代器。
3.迭代器和可迭代对象之间的关系
(1)迭代器包含可迭代对象
(2)迭代器=可迭代对象._iter_()
(3)可迭代对象 并不能用,迭代器才能用
4.判断可迭代对象和迭代器的方法
(1)可迭代对象的判断的方法
    1.方法功能中存在_iter_功能
    2.用from  collections import Iterable
   print(isinstance(要检测的对象,Iterable))    
(2)迭代器判断的判断方法
    1.方法和功能中存在_iter_ 和 _next_的功能
     2.用 from collections import Iterator
     print(isinstance(要检测的对象,Iterator))
5.迭代器存在的本质是 :
(1)能够对python中的基本数据类型进行统一的遍历,
(2)它可以节省内存--惰性运算
   例如:文件句柄就是一个迭代器,range就是一个可迭代的对象
 
二.生成器
生成器就是迭代器,生成器是我们自己写出来的
带yield关键字的函数就是生成器 函数
生成器和函数在执行的时候只返回一个生成器,不执行函数中的内容
从生成器 中取值:
(1)_next_从迭代器中一个的取值
(2)for可以正常从里面取值 for i in g
 (3)其他数据类型强制转换成list(g)返回一个列表,里面装着生成器中所有的内容
注意:调用生成器函数的时候,要先获取生成器,在进行next取值。
生成器中的内容只能取一次,且按顺序取值没有回头路,取完为止。
posted @ 2017-09-04 15:30  明-少  阅读(89)  评论(0)    收藏  举报