"收益项目"与返回iter(项目)有什么好处?

esp*_*eed 6 python unit-testing iterator yield

在下面的示例中,resp.results是一个迭代器.

版本1:

items = []
for result in resp.results:
     item = process(result)
     items.append(item)
return iter(items)
Run Code Online (Sandbox Code Playgroud)

版本2:

for result in resp.results:
     yield process(result)
Run Code Online (Sandbox Code Playgroud)

返回版本1中的iter(项目)在性能/内存节省方面是否比简单返回项目更好/更差?

在"Python Cookbook"中,Alex表示明确的iter()"更灵活,但不经常使用",但是在版本2中返回iter(items)与yield的优缺点是什么?

另外,对迭代器和/或产量进行单元测试的最佳方法是什么? - 你不能做len(结果)检查列表的大小?

Mar*_*som 4

如果需要,可以很容易地将迭代器或生成器转回列表:

results = [item for item in iterator]
Run Code Online (Sandbox Code Playgroud)

或者正如评论中善意指出的,一种更简单的方法:

results = list(iterator)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是“列表(迭代器)”? (4认同)