【发布时间】:2015-07-23 03:12:38
【问题描述】:
包装(内部)迭代器时,通常必须将__iter__ 方法重新路由到底层迭代器。考虑以下示例:
class FancyNewClass(collections.Iterable):
def __init__(self):
self._internal_iterable = [1,2,3,4,5]
# ...
# variant A
def __iter__(self):
return iter(self._internal_iterable)
# variant B
def __iter__(self):
yield from self._internal_iterable
变体 A 和 B 之间是否存在显着差异?
变体 A 返回一个迭代器对象,该对象已通过 iter() 从内部可迭代对象中查询。变体 B 返回一个生成器对象,该对象从内部可迭代对象中返回值。出于某种原因,其中一个更可取吗?在collections.abc 中使用yield from 版本。 return iter() 变体是我迄今为止使用的模式。
【问题讨论】:
标签: python python-3.x iterable yield-from