迭代器,生成器和生成式
迭代器. 生成器, 生成式
1. 什么是迭代器
迭代就是一个重复的过程, 但每次重复都是基于上一次的结果而来的
也就是说, 每次运行拿到返回值后在原地不懂, 等再次调用时会在当前位置进行向下运行
迭代器不依赖索引取值,取值是不可逆的, 从头到尾依次取值,也不可跳到某一个位置
内置__iter__方法的是迭代器
内置__iter__和__next__方法的是迭代器对象
2. 为何要有迭代器
while循环不能对没有索引的容器进行取值, 而生成器就完美取代
特性:
是一种通用的取值方式
惰性机制, 节省内存
缺点: 取值不可逆,从头到尾依次取值
3. 如何使用迭代器
dic = {'name':"chen","age":18,"gender":"male"}
res = dic.__iter__()
msg = res.__next__()
print(msg)
使用__iter__方法把dic转成迭代器对象,
使用__next__一个个的取值
自定义生成器
先定义生成器是用来实现惰性计算, 从而达到节省内存的效果
但凡是函数内出现yield关键字, 调用函数将不会执行函数yield一下代码, yield会得到一个返回值
这就是我们定义的迭代器, 称之为生成器
与return 的相同 与不同
相同点: 都可以用来返回值,一个或多个,一次性
不同: return只能返回一次, 函数就结束了
yield能返回多次, 并且yield会挂起到上次退出位置
迭代器的优缺点
优点: 是一种通用的取值方式
惰性机制, 节省内存
缺点: 值不如索引
取值是一次性, 只能往后取, 不能指定值, 不走回头路
dic = {"name": "egon", 'age': 18, 'gender': "male"}
dic_iterator = dic.__iter__()
res1 = dic_iterator.__next__()
print(res1)
res2 = dic_iterator.__next__()
print(res2)
res3 = dic_iterator.__next__()
print(res3)
当取不到值时会抛出异常
dic_iterator.__next__() # StopIteration
捕捉异常
while True:
try:
res = dic_iterator.__next__()
print(res)
except StopIteration:
break

浙公网安备 33010602011771号