使用Python生成器的直方图问题?

问题描述 投票:0回答:1

我是发电机和协程的新手。我正在尝试使用生成器来模仿常见的直方图问题(给出一个列表,返回该列表中每个元素的出现情况)。

def genFunc():
    dct = {}
    while True:
        num = yield
        if num not in dct.keys():
            dct[num]=1
        else:
            dct[num]+=1
        print dct


g = genFunc()
next(g)

for each in [1,1,1,2]:
    print g.send(each)

使用上面的代码,我可以在每个阶段打印出字典“ dct”的状态。如何将其返回给调用函数?如果我在while块之外使用return,则会出现错误-无法将return与yield一起使用。

据我所知,生成器在yield语句中接收到send中传递的值。在这种情况下,理想情况下,我希望传递一个数字/整数并返回字典的当前状态。

python python-2.x
1个回答
0
投票

yield“返回”数据。您正在使用它来接收来自呼叫者的数据,但它也可以用于发送数据:

def genFunc():
    dct = {}
    while True:
        num = yield dct
        if num not in dct.keys():
            dct[num] = 1

        else:
            dct[num] += 1


g = genFunc()
next(g)

for each in [1, 1, 1, 2]:
    print g.send(each)

{1: 1}
{1: 2}
{1: 3}
{1: 3, 2: 1}

send返回所产生的结果。

© www.soinside.com 2019 - 2024. All rights reserved.