python 生成器与协程

时间:2022-08-28 12:12:10

生成器在迭代中以某种方式生成下一个值并且返回和next()调用一样的东西。

挂起返回出中间值并多次继续的协同程序被称作生成器。

语法上讲,生成器是一个带yield语句的函数。一个函数或者子程序只返回一次,但一个生成器能暂停执行并返回一个中间的结果。

随机数生成器实例:

from random import randint
def Mygen(alist):
while len(alist) > 0:
c = randint(0, len(alist)-1)
yield alist.pop(c) a = ["ss","dd","gg"] for i in Mygen(a):
print i #output
#dd
#gg
#ss

协程:

使用send()为协程发送某个值之前,协程会暂时的中止,此时,协程中的yield表达式将会返回这个值,而接下来的语句将会处理它。处理直到遇到下一个yield表达式才会结束,也就是函数暂时中止的地方。close()生成器则退出。

def Count(n):
count = n
while True:
val = (yield count)
if val is not None:
count = val
else:
count += 1 a = Count(10)
print a.next()
print a.next()
a.send(5)
print a.next()
print a.next()
a.close()
print a.next() #/usr/bin/python /Users/li/PycharmProjects/Nowcoder_Practice/tmp.py
#
#Traceback (most recent call last):
#
#
#
# File "/Users/li/PycharmProjects/Nowcoder_Practice/tmp.py", line 37, in <module>
# print a.next()
#StopIteration #Process finished with exit code 1