python – yield和return的结果不同
我真的不明白屈服声明在这种情况下是如何运作的.问题是,给定一个没有括号的表达式,编写一个函数来生成所有可能的完全括号(FP)表达式.比如说,输入是’1 2 3 4′,应该生成5个FP表达式: >(1(2(3 4))) 我的代码如下.
如果我使用return语句(注释掉的行),那么代码按预期工作.但是,当我在代码显示时更改为yield语句时,我只获得前4个结果.如果输入表达式的操作数的数量增加,那么当然会丢失更多结果.例如,对于输入’1 2 3 4 5′,我只得到8而不是14. 我终于想出通过注释第一行,第二行G = f(第一),第二行(第二行)并替换行来使代码工作的方法 对于e'(‘(‘e1 op e2’)’对于eG in firstG for e2 in secondG): 通过 for e in(‘(‘e1 op e2’)’for f1 in f(first)in e2 in f(second)): 这意味着由于行firstG,secondG = f(第一个),f(秒),生成器的某些“信息”丢失了,但我无法弄清楚真正的原因.你们能给我一些想法吗? 最佳答案
问题是你在yield版本中迭代生成器而不是列表,特别是在一个循环后耗尽的secondG.将行更改为此,它的工作原理如下:
或者,您可以更改循环:
非收益版本的工作原理是因为您返回列表,与生成器不同,列表可以重复迭代.另请注意,您只需迭代firstG一次,因此不会受到影响. 记住这个:
相当于:
更清楚地显示了B上的重复循环. 另一个例子:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |