发送和接收python3生成器的循环

时间:2015-12-15 18:10:02

标签: python python-3.x

假设我有一个生成器,它实际上是递归解析外部文档引用的函数。用一些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)

有类似的东西吗?

1 个答案:

答案 0 :(得分:0)

你绝对可以这样做:拥有一个产生和对象的生成器;客户端可以修改对象,并且在yield之后,生成器将有权访问修改后的对象。

然而,这违背了发电机背后的想法,而且你使它既笨拙又难以理解。相反,你应该遍历你的网址并调用fetch_content,从而创建一个内容列表。它实际上是一个单行:

contents = [http_fetch_content(url) for url in resolver(base_document)]