迭代器
能够被next调用, 并不断返回值的一个对象
惰性排序, 一次只获取一个数据, (占用一个空间)
迭代器可以遍历无限量的数据
特点:
1.惰性序列, 节省内存
2.遍历使用next, 方向不可逆
3.迭代器可以遍历无限量大的数据
1. 可迭代对象
1 # 判断是不是可迭代对象 2 # 使用dir(obj) 看是否实现__iter__ 3 setvar = {1, 2, 4, 5} 4 print('__iter__' in dir(setvar)) 5 6 7 """ 8 把可迭代对象变成迭代器: 9 iter(obj) 10 obj.__iter__() 11 12 迭代器调用的时候: 13 obj.__next__() 14 next(obj) 15 """ 16 # 方法一 17 iter1 = setvar.__iter__() 18 # 方法二 19 iter2 = iter(setvar) 20 21 22 # 调用的时候 23 iter1.__next__() 24 iter1.__next__() 25 iter1.__next__() 26 # next(iter1) 超出元素范围, 会报错
关于for循环:
1 for i in setvar: 2 print(i) 3 4 # for 循环会把迭代对象变成迭代器, 然后调用next()
2.迭代器
1 # 判断是不是迭代器 2 3 # 1.使用dir(obj) 有没有__next__ 4 print('__next__' in dir(iter1)) 5 6 # 2.使用isinstance 7 from collections import Iterable, Iterator 8 print(isinstance(iter1, Iterable)) 9 print(isinstance(iter1, Iterator)) 10 11 12 13 # 判断range的迭代属性 14 print(isinstance(range(5), Iterable)) 15 print(isinstance(range(5), Iterator)) 16 17 18 # 吧range变成迭代器 19 res = range(5).__iter__() 20 print(isinstance(res, Iterator))