gpt4 book ai didi

python - Python生成器对象遍历后是否变成 "unusable"?

转载 作者:太空狗 更新时间:2023-10-29 21:38:08 26 4
gpt4 key购买 nike

我正在处理一个 Flask 项目,从 API 包装器获取一些数据。包装器返回一个生成器对象,所以我在将其传递给 Flask 的 render_template() 之前打印值(for obj in gen_object: print obj) .

打印对象时请求页面时,页面是空的。但是删除 for 循环后,页面会呈现生成器对象的内容。

@app.route('/')
def front_page():
top_stories = r.get_front_page(limit=10)
# this for loop prevents the template from rendering the stories
for s in top_stories:
print s
return render_template('template.html', stories=top_stories)

最佳答案

是的,发电机只能消耗一次。每次我们迭代一个生成器时,我们要求它给我们另一个值,如果没有更多的值给我们,就会抛出 StopIteration 异常,这将停止迭代。生成器无法知道我们要在不克隆它的情况下再次迭代它。

只要记录可以轻松地放入内存中,我就会改用列表:

top_stories = list(top_stories)

这样您就可以多次迭代 top_stories。

有一个名为 itertools.tee 的函数可以复制迭代器,它也可以帮助您,但有时它比仅使用列表要慢。引用: http://docs.python.org/library/itertools.html?highlight=itertools.tee#itertools.tee

关于python - Python生成器对象遍历后是否变成 "unusable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6965704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com