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

Python中支持多序列类型的slice函数如何正确书写类型注解?

错误原因

你之前的写法报错是因为定义TypeVar T 时引入了未绑定的类型变量 E:E 没有出现在函数的参数、返回值签名中,mypy 无法推导 E 的具体类型,因此抛出未绑定错误。同时你不需要将 Sequence[E] 显式列在 TypeVar 的约束列表里。

正确实现

针对 Python 3.9+ 环境,有两种常用的合法写法:

通用兼容写法

如果希望该函数支持所有可切片的序列类型(除了你用到的 str/bytes/list 外,也包含 tuple 等其他序列子类),可以直接用绑定到 Sequence 基类的 TypeVar 实现:

from typing import TypeVar
from collections.abc import Sequence

T = TypeVar("T", bound=Sequence)

def slice(seq: T) -> T:
    return seq[1:3]

限定类型写法

如果希望严格限制仅支持 str/bytes/list 三种输入类型,可以直接把这三类写到 TypeVar 的约束列表里,3.9+ 支持直接用内置集合类型做注解:

from typing import TypeVar

T = TypeVar("T", str, bytes, list)

def slice(seq: T) -> T:
    return seq[1:3]
校验说明

以上两种写法都可以通过 mypy 校验,也能覆盖你给出的三个断言用例:

  • 传入 str 返回 str
  • 传入 bytes 返回 bytes
  • 传入 list[int] 返回 list[int]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:15:03