1. 可迭代对象是什么?
字面意思:可以重复迭代的工具。
专业角度: 内部含有'__iter__'
并且含有"__next__"
方法的对象,就是迭代器
2. 可迭代对象如何转化成迭代器
li = [1, 2, 3, 4, 5
obj = iter(li) # 转换方法 # iter是一个内置函数
print(obj)
# 输出结果
<list_iterator object at 0x10fa7d4a8> # 这个就是一个迭代器
3. 迭代器可以利用next()进行迭代取值
li = [1, 2, 3, 4, 5]
obj = iter(li)
print(obj)
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj)) # 每执行一次print(next(obj)) 就取一个值,取到最后再去取值的时候取不到了就会报错
4. 迭代器的优缺点和特性
迭代器优点:
- 非常节省内存。
- 惰性机制。
迭代器缺点:
- 不直观。
- 操作不灵活。
- 效率相对低。
特性:
next执行会停止在最后执行的值的后面,下次执行会继续往后取值
l1 = [22, 33, 44, 55, 66, 77]
obj = iter(l1)
for i in range(3):
print(next(obj))
# 输出结果
22
33
44
for i in range(2):
print(next(obj))
# 输出结果
55 # 上次执行完毕后,就停止在上次那个位置后面,再次执行继续往下走
66
5.利用while循环,模拟for循环内部循环可迭代对象的机制
li = [1, 2, 3, 4, 5]
# 1,先要将一个可迭代对象转换成一个迭代器
obj = iter(li)
while 1:
try: # 2,然后使用调试模式
print(next(obj)) # 3,接着使用netx开始一个一个取值
except StopIteration: # 4,因为迭代器的特性,取值完毕后取不到会报错,所以如果遇到该StopIteration报错就退出循环
break
# 输出结果
1
2
3
4
5
利用while循环,模拟for循环内部循环可迭代对象的机制。
- 先要将可迭代对象转化成迭代器。
- 利用next对迭代器进行取值。
- 利用异常处理try一下防止报错。
6. 可迭代对象与迭代器的对比
可迭代对象:
可迭代对象是一个操作比较灵活,直观,效率相对高,但是比较占用内存的数据集。
迭代器:
迭代器是一个非常节省内存,满足惰性机制,但是效率相对低,操作不灵活的数据集。