特点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王八蛋给吃了!