如何为返回csv.reader结果的Python函数正确添加类型注解?
为CSV读取器函数添加类型注解的方案
方案一:使用抽象可迭代类型(推荐,无内部依赖)
这种方式不依赖csv模块的内部实现细节,通过描述返回值的行为来标注类型,符合Python的鸭子类型理念:
import csv from typing import Iterable, IO def create_my_csv(fh: IO[str]) -> Iterable[list[str]]: return csv.reader(fh, delimiter=";", strict=True)
IO[str]:标注参数fh是文本模式打开的文件对象,完全符合csv.reader的输入要求Iterable[list[str]]:csv.reader返回的对象是可迭代结构,每次迭代会生成一个由字符串组成的列表,这个注解准确描述了它的核心行为
方案二:直接引用csv.reader的返回类型(Python 3.10+)
如果想要更直接地复用csv.reader的返回类型,可以用ReturnType和typeof来避免显式书写内部的_csv.Reader:
import csv from typing import ReturnType, IO # 定义类型别名,获取csv.reader的返回类型 CSVReader = ReturnType[typeof(csv.reader)] def create_my_csv(fh: IO[str]) -> CSVReader: return csv.reader(fh, delimiter=";", strict=True)
这个方式底层仍指向_csv.Reader,但代码中没有显式依赖内部模块,满足你不想直接写_csv.Reader的需求。
内容的提问来源于stack exchange,提问作者Florian Kusche
相关产品推荐
相关产品推荐

