You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python标准库是否有重复调用函数生成迭代器直至抛出StopIteration的方法?

解决方案

你要的效果可以直接用Python内置的iter()函数的双参数重载实现,不需要自定义工具函数,也不需要引入第三方依赖:

# 先定义一个全局唯一的哨符对象,保证不会和方法返回的有效值重复
_sentinel = object()
for batch in iter(reader.read_next_batch, _sentinel):
    writer.write_table(batch)

原理解释

Python内置的iter(callable, sentinel)会返回一个迭代器,迭代逻辑是:

  • 重复调用传入的无参可调用对象(这里就是reader.read_next_batch)
  • 默认情况下当调用返回值等于传入的sentinel时终止迭代
  • 如果调用过程中可调用对象主动抛出StopIteration,迭代也会直接终止,和你自定义的生成器逻辑完全一致

我们这里传入自定义的object()实例作为哨符,因为它是内存中唯一的对象,永远不可能和read_next_batch返回的pyarrow批次对象相等,所以完全不会出现提前误终止的问题,所有终止逻辑都由read_next_batch抛出的StopIteration控制。

如果你确认read_next_batch永远不会返回None,也可以直接简化写法:

for batch in iter(reader.read_next_batch, None):
    writer.write_table(batch)

内容的提问来源于stack exchange,提问作者Tarquinnn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:24:03