斐波那契数列和生成器
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "Deakin" # Email: 469792427@qq.com # Date: 2018/3/7 def fib(limit): n,a,b=0,0,1 while n < limit: #print(b) yield b #把print替换成yield就把函数变成了生成器 a,b=b,a+b n+=1 return 'end' f=fib(10) print(f) print(f.__next__()) print('插入符') #生成器可以保存列表的使用位置 print(f.__next__()) print(f.__next__()) for i in f: print(i) 打印结果: <generator object fib at 0x000002518DED8C50> 1 插入符 1 2 3 5 8 13 21 34 55
生成器并发运行:
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "Deakin" # Email: 469792427@qq.com # Date: 2018/3/12 f=["巧克力陷","奶油馅","豆沙馅","黑芝麻馅"] import time def customer(name): print('%s准备吃汤圆了'%(name)) while True: tangyuan=yield print('汤圆%s来了,被%s吃了'%(tangyuan,name)) def produce(): c=customer('deakin') c2=customer('dj') c.__next__() c2.__next__() print('开始做汤圆了') for i in f: time.sleep(1) print('做了2个汤圆') c.send(i) #把i传给了yield c2.send(i) produce() 打印结果: deakin准备吃汤圆了 dj准备吃汤圆了 开始做汤圆了 做了2个汤圆 汤圆巧克力陷来了,被deakin吃了 汤圆巧克力陷来了,被dj吃了 做了2个汤圆 汤圆奶油馅来了,被deakin吃了 汤圆奶油馅来了,被dj吃了 做了2个汤圆 汤圆豆沙馅来了,被deakin吃了 汤圆豆沙馅来了,被dj吃了 做了2个汤圆 汤圆黑芝麻馅来了,被deakin吃了 汤圆黑芝麻馅来了,被dj吃了 Process finished with exit code 0
PS:这里的并行运算其实还是逐条进行,但是显示出来的效果好像是2条并行的。