包装(内部)迭代器时,通常必须将__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()