15. 迭代器
1. 概述
能被next调用,并不断返回下一个值的对象(迭代器是对象)
2. 迭代器的特点及优点
特点
迭代器会生成惰性序列,它通过计算依次的把值返回,一边循环一边计算而不是一次性得到所有的数据
优点
需要的时候,一次取一个,可以大大节省内存空间,而不是一股脑把所有的数据放进内存
总结
1. 惰性序列,节省内存空间
2. 遍历获取值得时候使用next,方向不可逆
3. 迭代器可以遍历无限量大的数据
3. 可迭代对象
如何判定是一个可迭代对象
__iter__ : 如果数据类型当中含有这个方法,那么它就是一个可迭代对象
dir: 可以查看当前数据类型的内存成员,从而查看是否有__iter__这个方法
示例
setvar = {1,"a",2,"b"}
res = dir(setvar)
print(res)

4. 迭代器
如何变成迭代器
方法1:(推荐使用)
iter(可迭代对象)
方法2:
可迭代对线.__iter__()
如何调用迭代器
方法1:(推荐使用)
next(迭代器)
方法2:
迭代器.__next__()
如何判定迭代器
含有__iter__和__next__这2个方法,同时存在就是迭代器,2者缺一不可
总结: 可迭代对象不一定是迭代器因为可迭代只具有__iter__即可,但是迭代器一定是可迭代对象
用py提供的方法来判断是迭代器还是可迭代对象
from collections.abc import Iterable,Iterator
# Iterable:表示可迭代对象 Iterator:表示迭代器
setvar = {1,"a",2,"b"}
res = dir(setvar)
print(res)
res1 = isinstance(setvar,Iterator)
res2 = isinstance(setvar,Iterable)
print(res1) False
print(res2) True
from collections.abc import Iterable,Iterator
res3 = isinstance(range(10),Iterator)
res4 = isinstance(range(10),Iterable)
print(res3) False
print(res4) True
遍历迭代器
方法1: 通过for循环来遍历,如果数据量特别大就不适用了
it = iter(range(100))
for i in it:
print(i)
方法2: 通过for循环配合next来遍历迭代器
it = iter(range(1000000))
for i in range(100):
res = next(it)
print(res)