指的是重复迭代,每一次迭代都是基于上一次的结果而来的python
迭代器指的是迭代取值的工具,它能够迭代取值工具
str , list , dict , set , tuple , 文件open('a.txt')code
全部的序列类型,凡是内部有.__iter__()内置方法的都是可迭代对象
可迭代对象.__iter__() 获得的返回值就是“迭代器对象”
迭代器对象.__next__() 每执行一次都会从跌打器对象中去走一个值 s = "迭代器" str_iter = s.__iter__() print(str_iter.__next__()) print(str_iter.__next__()) print(str_iter.__next__()) # print(str_iter.__next__()) # 多执行一次就会报错StopIteration,由于迭代器中的值已经取完了 >>> 迭 代 器
一、获取可迭代对象:直接定义序列类型(str , list , tuple , dict , set , f)对象
特色:内置有__ iter __()索引
二、获取迭代器对象:经过可迭代对象调用获得返回值,可迭代对象.__ iter __()内存
特色:内置有__ next __()it
优势:io
一、不依赖索引迭代取值for循环
二、节省内存空间ast
缺点:
一、取指定某个值麻烦
二、每次取值都要从第一个值开始,没法经过索引取值
三、没法获取长度
语法:for i in 可迭代对象:
in:可迭代对象--->内部会自动调用.__ iter__()--->迭代器对象
用 for i in 可迭代对象:就是调用迭代器对象.__ next__()
for循环内部也会有一个捕获异常机制,一旦遇到异常也会中止取值。
list1 = [1, 2, 3, 4] for line in list1: # list1是可迭代对象 ----> 内部会自动调用.__iter__() ---> 迭代器对象 # 迭代器对象.__next__() print(line)
迭代器本质上是一个可迭代对象
文件既是可迭代对象,也是迭代器对象
可迭代对象不必定是迭代器对象
迭代器取值当取完后并不知道,多取一次就会报错,所以咱们用try:和except StopIteration:防止报错
# 若是没有使用try list1 = [1, 2, 3, 4] list1_iter = list1.__iter__() while True: print(list1_iter.__next__()) >>> 1 Traceback (most recent call last): 2 3 File "E:/Python/练习/迭代器.py", line 25, in <module> 4 print(list1_iter.__next__()) StopIteration
# 使用try list1 = [1, 2, 3, 4] list1_iter = list1.__iter__() while True: try: print(list1_iter.__next__()) except StopIteration: break >>> 1 2 3 4