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

如何为接收可迭代对象的分块函数(chunker)添加类型注解?

解决方案

你需要用 Iterable[T] 替代 Iterator[T] 作为参数的类型注解,因为所有支持for i in seq遍历的对象都属于可迭代类型(Iterable),而Iterator只是Iterable的一个子集(带__next__方法的迭代器)。

修改后的代码如下:

from typing import Iterator, List, Iterable, TypeVar
T = TypeVar('T')
def chunker(seq: Iterable[T], size: int) -> Iterator[List[T]]:
    chunk = []
    for item in seq:
        chunk.append(item)
        if len(chunk) == size:
            yield chunk
            chunk = []
    if chunk:
        yield chunk

for i in chunker([1, 2, 3, 4], 5):
    print(i)  # 输出: [1,2,3,4]

关键说明

  • Iterable[T] 是Python类型系统中专门用来表示可被遍历的对象的协议,包含了列表、元组、生成器、集合等所有能用于for循环的类型,比Union[Iterator[T], List[T]]更通用且优雅。
  • 当你在for循环中使用Iterable对象时,Python会自动调用iter()方法将其转换为Iterator,所以函数内部的遍历逻辑完全不受影响。
  • 原代码中Iterator[T]的注解过于严格,因为像列表这类常见的可迭代对象本身并不是迭代器(没有实现__next__方法),只有调用iter(list)后才会得到迭代器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:09