从gen返回小批量项目

2024-04-25 23:48:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个类来包装生成器函数,这样我就可以批量地从生成器中获取预定义大小的项。在

也就是说,如果我有一个10个随机数的列表,并且指定了2个小批量,我希望得到5个2个数字的元组。在

我将以下包装器类编写到一个生成器函数中,希望它能完成此任务:

import random

class multiple_lottery_draws(object):
    def __init__(self, num_draws):
        self.num_draws = num_draws
        print("Initialized % draws"%self.num_draws)

    def my_lottery(self):
        # returns 9 numbers between 1 and 100
        for i in range(10):
            yield random.randint(1, 100)

        # returns a 10th number between 1000 and 2000
        yield random.randint(1000,2000)

    def __iter__(self):
        data = []
        for i in range(self.num_draws):
            data.append(next(iter(self.my_lottery())))
        yield data

two_draws = multiple_lottery_draws(2)

不过,虽然发电机本身工作正常

^{pr2}$

如果我试图从包装类获取小批量,我只得到一个项目

for i in two_draws: print i
# prints: [74, 95]

我做错什么了?在


Tags: 函数inselffordatamydefrandom
2条回答

您只调用yield一次。试试这样的方法:

def __iter__(self):
    data = []

    for i in self.my_lottery():
        data.append(i)

        if len(data) == self.num_draws:
            yield data
            data = []

    if data:
        yield data

请注意,在my_lottery中,您调用yield10次(在循环中),它产生10个值。但是在__iter__中,只调用yield一次,因此只产生一批值。在

相关问题 更多 >