python3生成器的发送和接收for循环
假设我有一个生成器,它实际上是一个递归解析外部文档引用的函数。说一些带有href标记的XML 我制作了一个生成器,它返回一个URL,并期望URL的内容被发送回生成器。例如,我可以这样使用它: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
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本身可以有外部引用。我想要递归解析你正在冒着递归的风险,直到它解析了整个互联网。我不确定如何以及您希望从递归解析中提取什么,但生成器可能不是实现这一点的最佳工具。还有其他强大的构造,如递归方法调用等。