可迭代的,迭代器
阅读目录:
可迭代的(iterable)
- 检测某个变量/值 是不是可迭代的?
-
第一种:
print("__iter__" in dir([])
第二种:
from collections import Iterableprint(isinstance([],Iterable)
-
- 可迭代的都可以使用for循环
迭代器(iterator)
可迭代变量.__iter__()返回一个迭代器
- for 循环
- for循环取值
- for循环内部的机制就是迭代器取值的机制
- for循环执行过程中:先把可迭代的变成一个迭代器,然后在一个一个的取值
- for循环的机制就是 ,for循环取值完毕后再取值不会报错
- 总结:
- 生成迭代器
- 循环每一次对这个迭代器执行next
- 并且到迭代器的最后就停止
1、判断__next__与__iter__在不在dir(可迭代的)
2、from collections import Iterator
print(isinstance(f,Iterator)
第一种:异常处理
l = [1,2,3,5,6,7,12,23,412] l_iter = l.__iter__() while True: try: # 要保护的代码 print(l_iter.__next__()) except StopIteration: # 要保护的代码中一旦出现了StopIteration错误,程序不报错,直接执行break print('报错啦') break 第二种:计数器,小于可迭代对象的长度 count = 0 l_iter = l.__iter__() while count < len(l): print(l_iter.__next__()) count += 1
迭代器和可迭代的关系
- 所有的迭代器都是可迭代的,反之不成立
- 迭代器是特殊的存在
for循环和迭代器的关系
- 无论是可迭代的还是迭代器都可以被for循环
- 如果直接循环迭代器,那么循环一次就没有了
- 如果循环的非迭代器,那么每一次循环都相当于从头开始循环,因为在for循环中的所有的非迭代器都会通过iter生成一个新的迭代器