迭代器

迭代器

for循环的内部机制
  1. 首先获取到迭代器
  2. 使用while循环获取数据
  3. it.next() 来获取数据
  4. 处理异常 try:XXX except StopIteration:break

list = [1,2,3]
it = list.__iter__()    #获取迭代器
while True:
    try:
        el = it.__init__()  #获取下一个元素
        print(el)
    except StopIteration:   #处理错误
        break

上面是for循环的底层原理

for el in list:
    print(el)
怎么检查需要迭代的对象是可迭代对象:
  • 用dir()内置函数检查=====> 如果是可迭代对象,打印出的内置函数会有 iter 函数。
  • 可迭代对象可以使用__iter__()来获取到迭代器
  • 迭代器里面有__next__()
#非官方检查方案
lst = [1,2,3,4,5]
it = lst.__iter__()

print("__iter__" in dir(it))
print("__next__" in dir(it))
# 官方检查方案
form collections import Iterable    #可迭代对象
from collections import Iterator    #迭代器
 
 print(isinstance(lst, Iterable))    #判断lst是否是可迭代对象
 print(isinstance(lst, Iterator))   #判断lst是否是迭代器
 
总结
  1. Iterable: 可迭代对象。内部包含__iter__()函数
  2. Iterator: 迭代器。内部包含__iter__和__next__()。
  3. 迭代器特点:
    • 节省内存
    • 惰性机制
    • 不能反复,只能向下执行
    • for循环
posted @ 2019-07-09 14:20  曾大帅啊哦  阅读(162)  评论(0)    收藏  举报