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

python3生成器的发送和接收for循环,python,python-3.x,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_d

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

诸如此类的事情吗?

你绝对可以做到:有一个生成器,可以产生和对象;客户端可以修改对象,并且在生成之后,生成器将立即访问修改后的对象

然而,这与发电机背后的想法背道而驰,你让它既尴尬又不可读。相反,您应该在URL上循环并调用fetch_content,从而创建一个内容列表。它实际上是一条单行线:

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

但是这些外部URL本身可以有外部引用。我想要递归解析你正在冒着递归的风险,直到它解析了整个互联网。我不确定如何以及您希望从递归解析中提取什么,但生成器可能不是实现这一点的最佳工具。还有其他强大的构造,如递归方法调用等。