可迭代对象
什么是迭代?
迭代就是更新换代,每一次的迭代都必需依赖上一次的结果。单纯的重复不是迭代
什么是可迭代对象?
- 内置有__iter__方法的都可以称之为是可迭代对象
- 可迭代对象其实就是为了后续迭代取值做准备
- 提供了不依赖于索引取值的方式
属于可迭代对象的有:
字符串、列表、字典、元组、集合、文件对象
迭代器对象
可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
迭代器的特征:
含有__iter__方法和__next__方法
for循环内部原理
for 变量名 in 可迭代对象:
循环体代码
- 会将in后面的数据调用__iter__()变成迭代器对象
为什么文件对象也可以for循环, 因为本身就是迭代器对象, 再次调用不变 - 针对产生的迭代器对象依次调用__next__()方法迭代取值
- 当值取完之后 会自动处理报错并退出循环
for循环的本质
即先将遍历的对象用iter方法做成迭代器,再循环调用next方法拿到迭代器里参数的值,直到python捕捉到了StopIteration异常,这时终止循环,也就是for循环结束
# 利用while与异常捕获 实现for循环的功能
info = {'name': 'jason', 'age': 18, 'pwd': 123}
# 1.先转换成迭代器对象
# res = info.__iter__()
res = iter(info)
# 2.迭代取值
while True:
# print(res.__next__())
try:
print(next(res))
except StopIteration as e:
# 结束while循环
break
迭代取值和索引取值的对比
-
索引取值
优势: 可以反复获取相同的元素,并且没有固定的方向
劣势: 只能支持有序的容器类型;无序的无法取值兼容性没有迭代取值高 -
迭代取值
优势: 兼容所有的容器类型
劣势: 取值的顺序永远都是从左往右,并且无法重复获取;用过去就永远的过了