假设我有一个生成器,它实际上是递归解析外部文档引用的函数。用一些href标签说一些XML。
我已经创建了一个返回URL的生成器,并期望将url的内容发送回生成器。例如,我可以像这样使用它:
def http_fetch_content(url):
""" A function that returns the body of a HTTP GET request to the URL """
(...)
resolver = resolver_generator(base_document)
try:
url = next(resolver)
while True:
resolver.send(http_fetch_content(url))
except StopIteration:
pass
我的问题是:有没有更简单的方法来使用这台发电机?类似于在for循环中使用仅输出生成器的方式。类似的东西:
for url in resolver(base_document):
yield http_fetch_content(url)
有类似的东西吗?
答案 0 :(得分:0)
你绝对可以这样做:拥有一个产生和对象的生成器;客户端可以修改对象,并且在yield之后,生成器将有权访问修改后的对象。
然而,这违背了发电机背后的想法,而且你使它既笨拙又难以理解。相反,你应该遍历你的网址并调用fetch_content,从而创建一个内容列表。它实际上是一个单行:
contents = [http_fetch_content(url) for url in resolver(base_document)]