python 生成器

##   列表的生成  使代码更加简洁

[ i *2 for i in range(10) ]

#  result :   [0,2,4,6,8,10,12,14,16,18]

 

## 生成器的介绍  :  1、生成器只有在调用的时候,才会生成相应的数据

          2、只记录当前的位置

          3、只有一个__next__()方法

 

def  fib(max):
n,b,a=0,1,0

while n<max :
yield (b) # print (b) # 有 yield 存在就已经成为一个生成器了
a,b = b,a+b # t = (b, a+b)
# a = t[0], b = t[1]
n = n+1
return 'done'
f = fib(30)
while True : # 打印任意的费波纳茨数列
try :
x = next(f)
print('f:',x)
except StopIteration as e :
print ('Generator return value :', e.value) # e.value 使return 的值 也就是 done
break
#通过生成器实现协程并行运算

 

import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield

print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

# c = consumer('xiaoming')
# c.__next__()
# c.__next__()
# b1 = '韭菜馅'
# c.send(b1)

def producer(name):
c = consumer('A')
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!")
c.send(i)
c2.send(i)

producer("alex")

posted on 2018-01-12 23:27  dotiger  阅读(144)  评论(0)    收藏  举报

导航