迭代器与生成器

Posted yoyoua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器与生成器相关的知识,希望对你有一定的参考价值。

迭代器

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

迭代器的特点:

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)

 

以上是关于迭代器与生成器的主要内容,如果未能解决你的问题,请参考以下文章

python 基础篇 13 迭代器与生成器

Python迭代器与生成器

第五篇Python之迭代器与生成器

Python迭代器与生成器

Python迭代器与生成器

6Python全栈之路系列之迭代器与生成器