day4-生成器中的yield和__next__()

特点1. 在for i in range (xxx)的例子中,当print (i)时会一下打印出来所有的序列。如果用i = yield, 会引入__next__()的东西,它是一次只打印一个参数

特别2. 有N个变量,就要有N个__next__(),如下面例子中的eater('A')和eater('B'), 有2个值,则要有2个__next__()

特点3.  循环中xxx=yield, 但如果后面没有给xxx赋值,则yield默认=None, 可以通过send yyy, yyy赋值给了yield,而yield又等于xxx, 所以这时相当于xxx就有值了

 1 import time
 2 
 3 def eater(name):
 4     print("%s准备吃包子啦!" %name)
 5     while True:
 6        number = yield
 7        print("'第%s个包子被%s王八蛋给吃了!" %(number,name))     #name在下面通过eater('A')给出来了,但number没给出来,那yield
 8                                                                #就是None,所以要通过send给number赋值
 9 
10 def maker(name):       #这里的code是要把0-10赋值给number
11     c1 = eater('A')    #2个吃货,把上面的eater(name)分解成了吃货A和B, A=name, B=name
12     #c2 = eater('B')
13     c1.__next__()
14     #c2.__next__()
15     print("%s要开始做包子了!
" %name)
16     for i in range(1,10):
17         time.sleep(1)
18         print("第%s个包子出笼了!" %i)     #做10个包子,1s一个
19         c1.send(i)     #i=1~9=yield=number=第1~9个包子可以吃了
20         #c2.send(i)
21 
22 maker('庆丰包子铺')     #做包子的
23 
24 
25 # A准备吃包子啦!
26 # 庆丰包子铺要开始做包子了!
27 #
28 # 第1个包子出笼了!
29 # '第1个包子被A王八蛋给吃了!
30 # 第2个包子出笼了!
31 # '第2个包子被A王八蛋给吃了!
32 # 第3个包子出笼了!
33 # '第3个包子被A王八蛋给吃了!
34 # 第4个包子出笼了!
35 # '第4个包子被A王八蛋给吃了!
36 # 第5个包子出笼了!
37 # '第5个包子被A王八蛋给吃了!
38 # 第6个包子出笼了!
39 # '第6个包子被A王八蛋给吃了!
40 # 第7个包子出笼了!
41 # '第7个包子被A王八蛋给吃了!
42 # 第8个包子出笼了!
43 # '第8个包子被A王八蛋给吃了!
44 # 第9个包子出笼了!
45 # '第9个包子被A王八蛋给吃了!
原文地址:https://www.cnblogs.com/marcoxu/p/7147407.html