4

我观看了 Raymond Hettinger 的Idiomatic Python演讲,并了解了. 我想尝试将它应用于我正在迭代使用分页的 API 的一段代码(它是 Twilio,但与我的问题无关)。iter()

我有一个返回的 API:数据列表和下一页 URL。当分页用尽时,下一页 URL 作为空字符串返回。我将获取函数编写为生成器,大致如下所示:

def fetch(url):
    while url:
        data = requests.get(url).json()
        url = data['next_page_uri']
        for row in data[resource]:
            yield row

此代码工作正常,但我想尝试删除while循环并将其替换为iter()使用该next_page_uri值作为哨兵参数的调用。或者,这可以用yield from?

4

1 回答 1

1

我认为这可能是您的意思……但正如评论中所述,它并没有太大帮助:

def fetch_paged(url):
    while url:
        res = requests.get(url)
        res.raise_for_status()
        data = res.json()
        yield data
        url = data['next_page_uri']

def fetch(url):
    for data in fetch_paged(url):
        yield from data[resource]

(我借此机会打了一个电话raise_for_status(),将raise不成功,即res.status_code < 400响应)

不确定它是否“更好”,但如果您要fetch_paged大量重用该功能,则可能

注意:许多其他 API以标准方式将其next_page_uri放入响应标头中,库知道如何处理并通过属性公开requestsres.links

于 2018-12-23T22:32:13.830 回答