高级篇(07):迭代器"/>
Python高级篇(07):迭代器
一、什么是可迭代对象(Iterable)
只要是可以通过for…in…的形式进行遍历的,那么这个数据类型就是可以迭代的对象。
# 遍历出字典中的key
d = {"a": 1, "b": 2}
for i in d:print(i) # 遍历出key# 遍历出lst的元素
lst = [1, 3, 5]
for i in lst:print(i) # 循环读文件中的内容
f = open('info.txt', mode='r', encoding='utf-8')
# 循环读大文件内容
for line in f:print(line.strip()) # 使用strip函数取消换行
f.close()
二、什么是迭代器(Iterator)
迭代器是一个可记住遍历的位置的对象。作用是用来访问容器中的元素,从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器本质:通过iter()函数获取这些可迭代对象的迭代器,然后对获取到的迭代器不断使用next()函数来获取下一条数据。
# 使用迭代器获取数据
from collections.abc import Iteratornums = [3, 5, 7] # 创建可迭代对象
nums = iter(nums) # 创建迭代器# while isinstance(nums, Iterator):
# num1 = next(nums) # 循环到第4次时,next()不再会返回元素,抛出StopIteration的异常,并整个程序中断
# print(num1)# 修改代码如下
while isinstance(nums, Iterator):try:num1 = next(nums)print(num1)except StopIteration:break
三、迭代器和可迭代对象的区别
- 迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器,如字符串、列表是可迭代对象,需要使用iter()方法转换才能变成迭代器。
- 迭代器本身不知道自己要执行多少次,每调用一次next(),就会往下走一步,是惰性的。
- 迭代器提供一种不依赖索引取值的方式,这样可以遍历没有索引的可迭代对象。
- 迭代器每加载一个元素至内存中随后释放,节省内存。
四、使用__iter__()和__next__()自定义迭代器
- 只要在类中,定义__iter__方法,那么这个类创建出来的对象一定是可迭代对象
- 如果类中实现了__iter__方法和__next__方法的对象,就是迭代器
d = {"a": 1, "b": 2, "c": 3}
a = d.__iter__()
print(type(a)) # <class 'dict_keyiterator'>
print(next(a))
print(next(a))
print(next(a))
更多推荐
Python高级篇(07):迭代器
发布评论