生成器和迭代器,列表推导式
迭代器
可迭代协议 : 某个变量中含有__iter__方法,这个变量可迭代
迭代器协议 : 某个变量中含有__iter__和__next__方
迭代器和可迭代的关系:
迭代器一定可迭代\反之不成立
迭代器的特点 :
节省内存
惰性运算
只能取一次
只能按照顺序取
for循环和迭代器之间的关系
如果是非迭代器,for循环会帮助我们把这个飞迭代器编程迭代
帮助我们执行next方法从迭代器中取值
帮助我们处理异常停止迭代
生成器
生成器就是迭代器
我们怎么获得生成器??
生成器函数
生成器表达式
什么是生成器函数?
含有yield方法
生成器函数有什么特点?
调用的时候不执行
返回一个生成器/迭代器
从生成器中取值的方式和迭代器一样
生成器函数和其他函数[本质上]我们得到的结果是相同的
只不过中间的过程不同
普通函数 必须得到所有结果之后才返回
生成器函数 可以一边计算结果一边返回
当已经有了一个列表,从这个列表中的每一个元素都需要做某个操作
并且需要将操作的结果放在一个新的列表中
适合使用列表推导式
新的列表 = [每一个元素要做的操作 for 列表中的每一个元素 in 列表]