迭代器与生成器

迭代器实际案例

for循环

凡是能够for循环的都是可迭代的

凡是可迭代的一定是是迭代器,可以通过调用iter方法迭代器得到一个方法。

迭代器不一定是可迭代的。

字典,元祖,集合,列表都是可迭代的。

数字和布尔值是不可迭代的,是可哈西数据类型。

 

 

概念

以将某个数据集内的数据“一个挨着一个的取出来”,就叫做迭代

可以被迭代要满足的要求就叫做可迭代协议。可迭代协议的定义非常简单,就是内部实现了__iter__方法。

 

 升级

 

from collections import Iterable

l = [1, 2, 3, 4]
t = (1, 2, 3, 4)
d = {1: 2, 3: 4}
s = {1, 2, 3, 4}

print(isinstance(l, Iterable))
print(isinstance(t, Iterable))
print(isinstance(d, Iterable))
print(isinstance(s, Iterable))



2:
初识生成器

我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存。

如果在某些情况下,我们也需要节省内存, 就只能自己写。我们自己写的这个能实现迭代器功能的东西就叫生成器。



Python中提供的生成器:

1.
生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

2.
生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

生成器Generator:

  本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现)
特点:惰性运算, 开发者自定义



工厂生产衣服案例

 






posted @ 2018-01-03 17:16  运维家园  阅读(122)  评论(0编辑  收藏  举报