想摸妹妹大腚 发表于 2020-6-19 22:03:36

关于生成器的这个函数有点不明白

import random

def get_data():
    """返回0到9之间的3个随机数"""
    return random.sample(range(10), 3)

def consume():
    """显示每次传入的整数列表的动态平均值"""
    running_sum = 0
    data_items_seen = 0

    while True:
      data = yield
      data_items_seen += len(data)
      running_sum += sum(data)
      print('The running average is {}'.format(running_sum / float(data_items_seen)))

def produce(consumer):
    """产生序列集合,传递给消费函数(consumer)"""
    while True:
      data = get_data()
      print('Produced {}'.format(data))
      consumer.send(data)
      yield

if __name__ == '__main__':
    consumer = consume()
    consumer.send(None)
    producer = produce(consumer)

    for _ in range(10):
      print('Producing...')
      next(producer)
红色部分看不懂是什么意思,谁能给解释解释???

Twilight6 发表于 2020-6-20 17:13:22

def get_primes(number):
    while True:
      if is_prime(number):
            number = yield number
      number += 1
yield 关键字返回 number 的值,而像 other = yield foo 这样的语句的意思是,“返回 foo 的值,这个值返回给调用者的同时,将 other 的值也设置为那个值”。你可以通过 send 方法来将一个值“发送”给生成器。

看看甲鱼哥的扩展阅读,这边解释就是你问的具体含义

只是我们这里的 :

data = yield

后面是空的 , 那么就是默认返回的是 None

当我们用 send 发射送给 生成器一个值时候,data 就会等于我们 send 的那个值,举个小例子:

def a():
    while True:
      x = yield
      print(x)
c = a()
print(c.send(None))
print(c.send('---'))

结果会是:
None# 第一个 None 由 print(c.send(None)) 打印
---       # 这个由 print(x) 打印
None    # 这个由 print(c.send('---')) 打印

我真的是个好人 发表于 2020-6-30 12:43:29

这名......绝了

想摸妹妹大腚 发表于 2020-7-17 16:43:26

我真的是个好人 发表于 2020-6-30 12:43
这名......绝了

哈哈
页: [1]
查看完整版本: 关于生成器的这个函数有点不明白