如何在MyPy/Pyright中推断可迭代对象首个元素的类型?
解决方案
你的代码写法已经满足需求,通过泛型TypeVar的定义,MyPy 和 Pyright 都能自动推断出函数返回值的具体类型。
验证示例
from typing import Iterable, TypeVar, List T = TypeVar('T') def get_first(iterable: Iterable[T]) -> T | None: for item in iterable: return item return None class Bob: pass ll : List[Bob] = [Bob(), Bob()] first_bob = get_first(ll) # MyPy/Pyright 会自动推断 first_bob 的类型为 Bob | None
注意事项
- 如果你使用 Python 3.9 及以下版本,需要用
Optional[T]替代T | None,记得先从typing导入Optional:from typing import Optional def get_first(iterable: Iterable[T]) -> Optional[T]: # 函数体不变 - 若要显式标注变量类型,可直接指定:
first_bob: Bob | None = get_first(ll)
本质上,你当前的类型注解已经实现了“让类型检查器识别返回值为可迭代对象包含的具体类型”的需求,无需额外调整。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

