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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:55:56