码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器与生成器

时间:2016-07-06 11:46:49      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

迭代器

迭代器是访问集合元素的一种方式。迭代器从集合的第一个元素开始访问,直到所有的元素被访问完结束。

迭代器的特点:

1.访问者不需要关心迭代器内部结构,只需要通过__next__方法去取下一个内容

2.不能直接访问集合中间的某个值,只能从头访问到尾

3.访问到一半时不能回退

4.适合访问比较大的数据结合,节省内存

li = iter([aa,bb,cc])  #生成一个迭代器

print(type(li))  
#<class ‘list_iterator‘>
print(li.__next__())  #获取下一个值
#aa
print(li.__next__())
#bb
print(li.__next__())
#cc

生成器

一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器。

yield:使函数中断,并保存中断状态,中断后可以继续执行其他代码,可以重新执行这个函数,从上一次yield语法下一句开始执行

ef money(qian):
    while qian >0:
        qian -= 100
        yield 100
        print(又来取钱了,败家子!!!)

atm = money(500)
print(atm.__next__())
print(atm.__next__())
print(来个大保健)
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
#输出结果
100
又来取钱了,败家子!!!
100
来个大保健
又来取钱了,败家子!!!
100
又来取钱了,败家子!!!
100
又来取钱了,败家子!!!
100

yield异步

在单线程的情况下实现并发运算

 1 import time
 2 def consumer(name):
 3     print(%s 准备吃包子了%name)
 4     while True:
 5         baozi = yield
 6         print(包子[%s]来了,被[%s]吃了 %(baozi,name))
 7 
 8 def shengchan(name):
 9     c = consumer("A")
10     c2 = consumer("B")
11     c.__next__()
12     c2.__next__()
13     print(%s开始做包子了%name)
14     for i in range(10):
15         time.sleep(1) #过了一秒钟
16         print(%s做了两个包子%name)
17         c.send(i)
18         c2.send(i)
19 
20 shengchan(yoyo)

 

迭代器与生成器

标签:

原文地址:http://www.cnblogs.com/yoyovip/p/5646360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!