zoukankan      html  css  js  c++  java
  • 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王八蛋给吃了!
  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/marcoxu/p/7147407.html
Copyright © 2011-2022 走看看