---恢复内容开始---
在一个函数里面 只要有yield 就是一个生成器 举一个例子 下面的是打印一个菲薄那数列
def creat_num (all_numbers): a, b = 0, 1 current_num = 0 while current_num <= all_numbers: current_num += 1 print(a) a , b = b ,a+b list1 = creat_num(10)
当把 print 改换成 yield的时候 就是一个生成器
生成器 两个功能 next 和 send
def creat_nmber (all_nubmers): a ,b = 0, 1 current_number = 0 while current_number < all_nubmers: ret = yield a print ("======>",ret) a, b = b ,a+b current_number += 1 obj = creat_nmber(10) ret = next(obj) # 默认从yield开始执行 想要一个生成一个 print(ret) ret = obj.send("hahhaah") # 发送东西给yield后面的参数 可用来更改后面参数的值 并且继续执行一次 print(ret)
输出结果为
0
======> hahhaah
1
根据 yield 方法构造出了一个 多任务---- 携程---生成器
def text1 (): while True: print(1) yield def text2 (): while True: print(2) yield def main(): while True: next(text1()) next(text2()) if __name__ == '__main__': main()
由于调用一个 每次只调用一个函数 所以携程 占用的资源最少