我是发电机和协程的新手。我试图使用生成器来模仿常见的直方图问题(给出一个列表,返回该列表中每个元素的出现情况)。
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一起使用。
据我了解,在send中传递的值由yield语句的生成器接收。在这种情况下,理想情况下,我希望传递一个数字/整数并返回dict的当前状态。
最佳答案
yield
将数据“返回”。您正在使用它来接收来自呼叫者的数据,但它也可以用于发送数据:
def genFunc():
dct = {}
while True:
num = yield dct # I'm yielding the dictionary
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
返回产生的结果。关于python - 使用Python生成器的直方图问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59314071/