在 Python 3 中,我们有 yield from
关键字,这对于在其他 yield
语句之间拼接现有迭代器的内容很有用。但是,如果我们只想从现有迭代器中产生所有结果,我们可以使用 yield from iterable
或简单地 return iterable
来获得相同的结果。显然,如果您需要您的代码在 Python 2 和 Python 3 中工作,您将被锁定在 return
选项中。但是,如果您只针对 Python 3,是否有充分的理由更喜欢其中一个? yield from
版本的优点是,任何阅读代码的人都可以立即看出此函数正在返回一个迭代器。另一方面,我认为 yield from
的原始实现可能比简单地返回现有迭代器要慢,但 CPython 或其他实现可能已经优化了这种情况。那么应该首选以下哪项?
def returns_an_iterator():
return iter([1,2,3])
def yields_from_an_iterator():
yield from iter([1,2,3])
最佳答案
除非你有其他原因包装一个迭代器,否则你应该直接返回它。
def with_return():
return range(10)
>>> with_return()
range(0, 10)
如果您使用 yield from
,您将创建一个中间生成器并在从迭代器读取每个值时增加开销。直接返回迭代器将避免这种开销。
def with_yield_from():
yield from range(10)
>>> with_yield_from()
<generator object with_yield_from at 0x030DEDB0>
关于python - 在 Python 3 中返回迭代器时, `yield from` 应该优先于 `return` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809970/