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

Python中如何为包含列表推导式的函数正确声明类型?

正确类型标注实现

Python 3.9 及以上版本

直接使用标准库内置的抽象基类标注即可:

from typing import TypeVar
from collections.abc import Iterable, Container

T = TypeVar('T')

def dual_combinator(self, a: Iterable[T], b: Container[T]) -> list[T]:
    return [x for x in a if x in b]

Python 3.8 及更早版本

需要从typing模块导入对应抽象类型:

from typing import TypeVar, Iterable, Container, List

T = TypeVar('T')

def dual_combinator(self, a: Iterable[T], b: Container[T]) -> List[T]:
    return [x for x in a if x in b]
标注说明
  • Iterable[T]:匹配所有可迭代遍历的类型,只要支持for...in遍历就能用于列表推导,完全覆盖你要求的「兼容列表推导式的对象」需求,比原写法的List[T]适用范围宽得多,元组、生成器、集合等类型都可以作为参数a传入。
  • Container[T]:匹配所有实现了__contains__方法的类型,也就是支持in运算符的所有对象,完全符合你对参数b的要求,列表、集合、字典、自定义的支持in运算的类都可以作为参数b传入。
  • 返回值list[T]是准确的:列表推导的返回结果固定为列表类型,元素类型和a、b的公共元素类型T一致,不存在标注不准确的问题。
官方文档查找方法
  • 通用类型标注规则、基础泛型类型的用法,直接查阅Python官方文档的typing模块章节即可,里面有完整的类型说明、使用示例和最佳实践。
  • 如果你需要标注支持某类特定行为的参数(比如支持遍历、支持in运算、支持长度计算),可以查阅Python官方文档的collections.abc模块章节,这里列出了所有容器相关的抽象基类,每个基类对应的接口、支持的运算符都有明确说明,直接匹配你需要的行为选择对应的基类标注即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:24:02