可迭代的
- 可被for循环的数据类型
- 可迭代协议:内部实现了__iter__()
-
# 列表是可迭代的,但非迭代器 print('__iter__' in dir([])) # True print('__next__' in dir([])) # False
迭代器Iterator
- 迭代器协议:内部实现了__iter__()和__next__()
- 迭代器优点:节省内存
常用方法
- 列表迭代器:[].__iter_()
-
from collections.abc import Iterator print(isinstance([].__iter__(),Iterator)) # True,列表迭代器
- 获取列表迭代器中的所有方法:dir([].__iter_())
- 获取列表中的所有方法:dir([])
- 列表迭代器比列表中多的方法:{'__setstate__', '__length_hint__', '__next__'}
-
lis1 = dir([]) lis2 = dir([].__iter__()) print(set(lis2)-set(lis1)) # {'__setstate__', '__length_hint__', '__next__'} lisiter = [6,9,8].__iter__() # 列表迭代器 print(lisiter.__length_hint__()) # 3 获取迭代器中的元素个数 lisiter.__setstate__(1) # 指定开始迭代位置 print(lisiter.__next__()) # 9 取迭代位置的值
- for循环,通过内部调用__next__()一个一个的取值