zoukankan      html  css  js  c++  java
  • python3----生成器generator(yield)

    # 列表推导式
    a = [i for i in range(100) if not(i % 2) and (i % 3)]
    print(a)
    # 字典推导式
    b = {i: i % 2 == 0 for i in range(10)}
    print(b)
    # 集合推导式
    c = {i for i in [1, 3, 2, 6, 5, 1, 2, 3, 6, 5, 9, 5]}
    print(c)
    # 生成器推导式
    d = (i for i in range(10))
    print(d)

    e = sum(i for i in range(100) if i % 2)

    实例:
     1 import random
     2 
     3 def get_data():
     4     # 返回0到9之间的3个随机数
     5     return random.sample(range(10), 3)
     6 
     7 
     8 
     9 def consume():
    10     # 显示每次传入的整数列表的动态平增增均值
    11     running_sum = 0
    12     data_items_seen = 0
    13 
    14     while True:
    15         data = yield
    16         data_items_seen += len(data)
    17         running_sum += sum(data)
    18         print('The running average is {}'.format(running_sum / float(data_items_seen)))
    19 
    20 
    21 def produce(consumer):
    22     # 产生序列集合,传递给消费函数(consumer)
    23     while True:
    24         data = get_data()
    25         print('Produced {}'.format(data))
    26         consumer.send(data)
    27         yield
    28 
    29 if __name__ == '__main__':
    30     consumer = consume()
    31     consumer.send(None)
    32     producer = produce(consumer)
    33 
    34     for _ in range(10):
    35         print('Producing...')
    36         next(producer)
    • generator是用来产生一系列值的
    • yield则像是generator函数的返回结果
    • yield唯一所做的另一件事就是保存一个generator函数的状态
    • generator就是一个特殊类型的迭代器(iterator)
    • 和迭代器相似,我们可以通过使用next()来从generator中获取下一个值
    • 通过隐式地调用next()来忽略一些值
    # 生成器的创建方式
    # 1,列表生成式
    # 2,函数
    #
    #
    # yield vs return
    # return 返回并中止函数
    # yield 返回数据, if 关冻结当前执行过程..:
    # next唤醒冻结的函数执行过程,继续执行,直到遇到下一个yield
    #
    # 函数有了yield之后
    # 1.函数名加()就得到了一个生成器
    # 2.return 在生成器里,代表生成器的中止,直接报错
    #
    # next
    #
    # 唤醒生成器的继续执行
    #
    # send("stop")
    # 1.唤醒并继续执行
    # 2.发送一个信息到生成器内部
  • 相关阅读:
    108.异常的传递
    107.捕获异常
    106.异常、模块(异常介绍)
    105.面向对象案例-烤红薯
    104.多态案例
    103.继承案例二
    102.继承案例一
    101.自定义玩家类
    100.自定义枪类
    python基础入门之十四 —— 文件操作
  • 原文地址:https://www.cnblogs.com/jonm/p/8288627.html
Copyright © 2011-2022 走看看