|
|
1
53
区别在于
所有内置迭代器(至少在python-3.x中)类似
实际上,您需要“使用”迭代器来获取值(例如。
功能
在评论中被问及 为什么这些被实现为类而不是函数
使用延迟评估操作有一个巨大的好处:当链接时,它们非常节省内存。除非明确“请求”,否则它们不需要创建中间列表。这就是为什么
然而(至少是CPython)用C实现了它们的所有内置模块(和几个标准库模块)。用C创建迭代器类非常容易,但我还没有找到任何合理的方法来创建基于Python-C-API的生成器函数。因此,这些迭代器被实现为类(在CPython中)的原因可能只是方便或缺乏(快速或可实现的)替代方案。
使用类而不是生成器还有另外一个原因:可以为类实现特殊方法,但不能在生成器函数上实现它们。这听起来可能并不令人印象深刻,但它有一定的优势。例如,大多数迭代器可以是
pickled
(至少在Python-3.x上)使用
请注意
虽然在以下情况下添加抽象层(工厂函数)是有意义的:
这种推理不适用于
|
|
2
4
打开REPL会话并键入
它确实是一个用于返回反向迭代器的类。
|