1.迭代器
能被next调用,并不断返回下一个值的对象
2.概念
迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续,单出的重复不是迭代
3.特征
不依赖索引,通过next指针迭代所有数据,一次只取一个,可以大大节省空间,理论上可以迭代无限量的数据
4.迭代器与可迭代对象的对比
1.可迭代对象
2.迭代器
1.for 循环遍历数据的底层实现就是利用了迭代器,通过next方法进行调用,从而获取数据
5.迭代器与可迭代对象的关系
从不可被直接获取 => 可被直接获取 的过程
6.怎么判定对象是迭代器还是可迭代对象?
dir()函数可以查看一个对象中的所有成员 --> res =dir()print(res) 如果成员中有'__iter__'方法,就是可迭代对象
7.如何定义一个迭代器?
1.iter(可迭代对象) 面向过程使用
2.__iter__ 面向对象使用
8.如何判断一个迭代器?
如果内置成员中,含有__iter__和__next__方法,就可以判断是一个迭代器
使用ctrl + f, 进行查找
res ="__iter__"indir(it)and"__next__"indir(it)print(res)9.如何调用一个迭代器?
1.next(迭代器)2.迭代器.__next__()
迭代器通过next方法调用时,是单向不可逆的过程
没有数据调用时,会报错吗? # StopInteration10.如何重置一个迭代器?
it =iter(setvar)
res =next(it)# 调用print(res)11.使用Iterator(迭代器类型) 和 Iterable(可迭代对象) 来判断是否是迭代器
from collections import Iterator, Iterable
# 判断setvar的迭代属性
setvar ={"a","b"}
res =isinstance(setvar,Iterator)
res1 =isinstance(setvar,Iterable)print(res)
如果是可迭代对象,就一定是迭代器吗? 不对;
如果是一个迭代器,就一定是可迭代对象吗? 对
可迭代对象 > 迭代器
# 判断range的迭代属性
it =iter(range(10))
res =isinstance(it,Iterator)
res1 =isinstance(it,Iterable)print(res)12.如何快速调用1000000次迭代获取数据
1.for循环
it =iter(range(10))for i in it:print(i)2.for循环 +next配合
it =iter(range(10000000))for i inrange(10):
res =next(it)print(res)# 1-9for i inrange(10):
res =next(it)print(res)# 10-18
1.高阶函数
能够把函数当成参数传递的就是高阶函数
2.map(func,iterable)
功能:
把Iterable里面的数据一个一个拿出来,放到func函数中进行处理,把处理结果扔到迭代器中,返回迭代器
参数:
func 自定义函数 or 内置函数
Iterable 可迭代对象(容器类型数据、range、迭代器)
返回值:
迭代器
例1:
from collections import Iterator,Iterable
it =map(int,lst)
res =isinstance(it,Iterator)print(res)
例2:[1,2,3,4]=>[1,4,9,16]deffunc(n):return n **2
it =map(func,lst)print(list(it))
改:
it =map(lambda n:n**2, lst)print(list(it))3.dic ={97:"a",98:"b",99:"c"}, 给{"a","b","c"},返回{97,98,99}# map改写
lst =["a","b","c"]
dic ={97:"a",98:"b",99:"c"}deffunc(n):
dic_new ={}for k,v in dic.items():
dic_new[v]= k
return dic_new[n]
it =map(func,lst)print(list(it))# 改deffunc(n):for k,v in dic.items():if n == v:return k
it =map(func,lst)print(list(it))
1.filter(func,iterable)
功能:
在自定义的函数中,过滤数据
如果返回True,代表保留数据,False代表舍弃该数据
参数:
func 自定义函数
iterable 可迭代性数据
返回值:
迭代器
例1:
[1,2,3,4,5,6,7,8]=> 要所有奇数
from collections import Iterator,Iterable
deffunc(n):if n %2==0:returnFalseelse:returnTrue
it =filter(func,lst)
res =isinstance(it,Iterator)print(res)print(it)
it =filter(lambda n :Trueif n %2==0)