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王八蛋给吃了!
  • 相关阅读:
    日期多选插件Kalendae.js
    解决iReport打不开的一种方法
    Hibernate不能建表的问题
    【JAVA】虚拟机指令集
    解决jquery操作checkbox火狐下第二次无法勾选问题
    关于Java异常一段很有意思的代码
    C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
    【转】C#中WinForm程序退出方法技巧总结
    为CentOS安装yum源
    Rsync CentOS 7 下安装
  • 原文地址:https://www.cnblogs.com/marcoxu/p/7147407.html
Copyright © 2011-2022 走看看