zoukankan      html  css  js  c++  java
  • 生成器 yield

    1. 生成器 只有在调用时才会生成相应的数据
     2 . 只记录当前的位置
    3 . 只有一个__next__()

    f = (x for x in range(10)) #一个简单的生成器 

    print(f.__next__())

    费波纳生成器(举例1)

    def fib(max):

          n,a,b = 0, 0, 1

          while n < max:

               yeild b         #断点和返回数值

               a, b = b, a+b    # r = (b, a+b)    a = r[0]   b = r[1] 

                n = n + 1

            return '--done--'

    g = fib(6)

    print(g)  # 可以看出g 是生成器

    while True:

             try:

                 print(g.__next__())

              except StopIteration as e:

                  print('not value',e.value)   # e.value = '--done--'

                  break 

    生成器包子(举例2)

    def generate_baozi(name):

          print('%s准备吃包子了‘%name)

          while True:

                   baozi = yield    #baozi 是一个[] 值

                   print('%s 吃了 %s 个包子’%(name. baozi)        #产生了一个生成器

    def consumer_baozi(name)

    c = generate_baozi('A')     生成了一个生成器c

    c1 = generate_baozi('B')    生成了一个生成器c1

    c.__next__()              #运行一次生成器c 输出('%s准备吃包子了‘%name)

    c1.__next__()            # 运行一次生成器 c2 输出('%s准备吃包子了‘%name)

    for i in range(10):

            print('%s 准备好了包子‘%(name))

            c.send(i)  # 往生成器c传值

            c1.send(i)  #往生成器c1传值

    consumer('alex') 

  • 相关阅读:
    Spring源码学习之容器的基本实现(一)
    面向对象设计原则
    简单易懂带你了解红黑树
    简单易懂带你了解二叉树
    单例模式
    原形模式
    数组与链表
    记一次解决postgresql数据库内存泄露的问题
    记一次排查CPU高的问题
    react ts 设置paths 和 声明非@types的模块
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9048074.html
Copyright © 2011-2022 走看看