迭代器(iterator):只要包含了‘双下iter'和__next__方法的对象
名词 迭代器(能从其中一个一个取出值来)
’5654546jdkfljfjflkfj'
lst_iterator = [1,2,3].__iter__()
可迭代对象:(含有__iter__方法的对象)
检测方法 1 form collections import Iterable
2 print(lsinstance(要检测的对象,Iterable))
迭代器 :(含有__iter__和__next__方法的对象)
检测方法
1 form collections.import Iterator
2 pirnt(isinstance(要检测的对象,Iterable))
迭代器和可迭代对象 关系:
迭代器 = 可迭代对象.__iter__()
包函关系
迭代器存在的本质:
1 能够对python 中的基本数据类型进行统一
2 它可以节省内存
f = open('file','w') 文件句柄就是一个迭代器
range(10000).__iter__() range就是一个可迭代对象
'__iter__'这个方法导致了一个数据类型的可迭代
所有能被for 循环的数据类型都是可迭代的 不是迭代器
生成器:(Gerator) (数字为对应执行顺序)
1 def generator_func(): 生成器函数
6 print(123)
7 yield'aaa' 相当于return
3 2 g = generator_func() generator生成器 生成器的本质就是迭代器
4 print(g)
8 5 ret = g.__next__()
9 print(ret)
带yield关键字的函数就是生成器函数
生成器函数在执行的时候只返回一个生成器,不执行生成器函数中的内容
生成器函数在执行的时候返回一个生成器
从生成器中取值:
1 __next__ 有几个yield就可以取几次
2 for 循环取值 下常取值for i in g:
3 其它数据类型进行强行转换 list(g) 返回一个列表里面装着生成器中的所有内容
4 调用生成器函数的时候,要先获取生成器,再进行next取值
5 生成器中的内容只能取一次,且按顺序取值没有回头路,取完为止。
生成器就是迭代器 生成器是我们自己的写的