了解Python中的yield
这个问题在这里已经有了答案:
- “yield”关键字有什么作用? 36个答案
这是对yield
的误解。 Python使用什么可以称为懒惰评估。 不是预先计算所有“收益率”,而是先到达第一个“收益率”并停止,然后仅返回一个迭代器。 如果您要从控制台调用F(10)
,您将看到一个迭代器对象。
当你开始迭代列表时,例如通过在[x for x in F(10)]
写[x for x in F(10)]
,那么Python会一遍又一遍地执行循环。
如果这很令人困惑,请将yield b
替换为return b
。 现在循环不再是无限的,是吗?
while
循环不会结束,因为您正在检查的变量在其中不会更改。 如果在每次在循环内屈服之后实际减小num
变量,则循环将是有限的。
而且,一旦函数被解析,循环就不会被执行,而是在第8行调用函数后执行。
也许发生的事情会更清楚,如果你试着迭代函数产生的迭代:
for i in F(10)
print i
结果应该如下所示:
1
2
3
5
... and so on forever
我不能投票,但阿萨德是正确的。 仅仅因为你定义了一个函数并不意味着它很兴奋。 假设你将它作为一个脚本运行,没有代码实际执行,直到它到达#8行。
链接地址: http://www.djcxy.com/p/1563.html