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(结果)检查列表的大小?
如果需要,可以很容易地将迭代器或生成器转回列表:
results = [item for item in iterator]
Run Code Online (Sandbox Code Playgroud)
或者正如评论中善意指出的,一种更简单的方法:
results = list(iterator)
Run Code Online (Sandbox Code Playgroud)