繁体   English   中英

生成器,产量,发送python

[英]Generators, yield, send python

我收到了这个作业问题,参加了关于udemy的课程后,我仍然不知道该如何解决。 这是关于产量,下一步和发送。

这是我需要做的:指导:

  1. 使用itertools.permutations生成列表的所有排列,并将它们存储在排列列表中
  2. 使用list.sort()对排列列表进行排序
  3. 遍历排列列表时使用yield关键字
  4. 检查yield语句是否获得了输入列表,如果是,则清空排列列表并重复步骤2

下面是我尝试的代码,它不支持send函数,并且继续使用旧的LIST。

def permute(items):
    permu_list = [perm for perm in pr(items)]
    permu_list.sort()
    for x in permu_list:
        yield x

这是结果的典范:

>>> g = permute(['b', 'a', 'c'])
>>> next(g)
('a', 'b', 'c')
>>> next(g)
('a', 'c', 'b')
>>> g.send(['e', 'q', 'c'])
('c', 'e', 'q')
>>> next(g)
('c', 'q', 'e')

您可以在yield语句中获取通过赋值发送的值。 喜欢:

received = yield something

对于您的用法,您需要额外的知识,您可以通过yield from语句从其他生成器中获益。 在您的情况下,您需要以下内容:

def permute(items):
    permu_list = [perm for perm in pr(items)]
    permu_list.sort()
    for x in permu_list:
        l = yield x
        if l:
            yield from permute(l)
            break

在具有l = yield x行中,如果您只是简单地在生成器上调用next,那么我会收到已发送到该生成器的None ,因此您在此处接收到None ,所以我编写了一个if语句来检查它是否为None值或它是来自send的值发电机的方法。

之后,我从获得的同一生成器函数中创建并使用另一个生成器。 通过permute(l)我创建了一个新的生成器,并通过yield from该生成器的输出作为输出来yield from ,此后,我不想继续从第一个列表中生成置换,因此我中断了循环。

有关更多信息,您可以查看这篇分为两部分的文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM