当前位置: 首页 > news >正文

Python学习(11) ----- Python的泛型

在 Python 中,泛型(Generics) 的概念主要用于 类型注解(type hints),帮助开发者在静态类型检查时(例如使用 mypypyright)获得更精确的类型推断。
泛型不影响程序的运行行为,而是让代码在 语义上更清晰、更安全


🧠 一、泛型是什么?

泛型的核心思想:

“一个类型对多种数据类型通用”。

例如,List[int] 表示一个只能装 int 的列表,
List[str] 表示一个只能装 str 的列表。

这可以防止混用类型的错误:

from typing import Listdef sum_list(numbers: List[int]) -> int:return sum(numbers)print(sum_list([1, 2, 3]))   # ✅ 正常
print(sum_list(["a", "b"]))  # ❌ 类型检查器会报错

🧩 二、使用泛型类型(TypeVar)

TypeVar 用于声明一个泛型参数:

from typing import TypeVar, ListT = TypeVar("T")  # 声明一个泛型类型变量def first_element(elements: List[T]) -> T | None:if elements:return elements[0]return None

🔹 用法说明:

  • T 表示一个“占位类型”;
  • 函数返回的类型与输入 List[T] 的元素类型一致;
  • 当传入 List[int] 时,返回值类型自动推断为 int
print(first_element([1, 2, 3]))    # 返回 int
print(first_element(["a", "b"]))   # 返回 str

🧱 三、在类中使用泛型

泛型类可以让类在定义时不固定数据类型:

from typing import Generic, TypeVarT = TypeVar("T")class Box(Generic[T]):def __init__(self, value: T):self.value = valuedef get(self) -> T:return self.value

✅ 使用时指定类型:

box1 = Box 
box2 = Box[str]("hello")print(box1.get())  # int
print(box2.get())  # str

⚙️ 四、带约束的泛型

可以通过 bound 或者 constraints 限制泛型类型:

1️⃣ bound(上界约束)

from typing import TypeVarclass Animal:def speak(self):print("Animal sound")class Dog(Animal):def speak(self):print("Woof!")T = TypeVar("T", bound=Animal)def make_speak(animal: T) -> None:animal.speak()make_speak(Dog())    # ✅ OK
make_speak(Animal()) # ✅ OK
# make_speak("string") ❌ 报类型错误

2️⃣ constraints(多类型约束)

from typing import TypeVarT = TypeVar("T", int, float)  # 只能是 int 或 floatdef double(x: T) -> T:return x * 2print(double(10))    # ✅ int
print(double(3.14))  # ✅ float
# print(double("a")) ❌ 类型检查失败

🧩 五、常用泛型容器

Python 的标准库 typing 模块已经提供了许多泛型容器:

泛型类型说明
List[T]列表
Dict[K, V]字典
Tuple[T, ...]元组
Set[T]集合
Iterable[T]可迭代对象
Optional[T]TNone
Union[A, B]AB

例如:

from typing import Dict, List, Optional, Uniondef process_data(data: Dict[str, List[int]]) -> Optional[Union[int, float]]:if "scores" in data:return sum(data["scores"]) / len(data["scores"])return None

🧭 六、Python 3.9+ 简写语法

在 Python 3.9 之后,可以用更简洁的语法:

# 旧写法
from typing import List, Dict
def f1(data: List[int]) -> Dict[str, int]:...# 新写法(推荐)
def f2(data: list[int]) -> dict[str, int]:...

✅ 小结

概念用法示例
定义泛型变量T = TypeVar("T")
泛型函数def func(x: T) -> T:
泛型类class Box(Generic[T]):
约束类型TypeVar("T", bound=Base)TypeVar("T", int, float)
内置泛型容器list[T], dict[K, V], tuple[T, ...]

http://www.dtcms.com/a/517843.html

相关文章:

  • 庆阳有人做农资网站吗wordpress+重装教程
  • 石家庄求职信息网百度seo关键词怎么设置
  • 仿360电影网站源码网站离线浏览器 怎么做
  • 怎么下载建设银行网站thinkphp开源cms系统
  • 从海量文档到精准数据:文档抽取技术驱动金融财税决策新范式
  • 如何对网站页面进行优化虚拟主机比较
  • 云智网站建设公司常州溧阳建设工程管理中心网站
  • 安宁网站建设 熊掌号广州市外贸网站建设企业
  • 网站制作论文致谢更改wordpress主题字体
  • C++Lambda表达式
  • 浙江手机版建站系统开发六安网站推广获客app
  • 网站和网页的区别在于搜索引擎提交入口
  • 网站开发php支付接口山东饰品行业网站开发
  • 自助发外链网站浅谈高校门户网站建设的规范标准
  • 建设电影网站点击播放是乱页的网站建站北京
  • 【算法专题训练】26、队列应用-广度优先搜索
  • 域名买好怎么开始做网站科技有限公司网页设计
  • dedecms网站备份一个做二维码问卷调查的网站
  • 衡水微信网站建设建行官方网站多少
  • C#中同步工具EventWaitHandle的打开方式详解
  • 衡东网站制作wordpress主机免费
  • 可以做cps合作的棋牌网站6软件开发培训班价格
  • git 添加除了包含特定字符串的文件
  • 校园服装网站建设预算全球建筑设计公司前十名
  • 扁平化设计重庆seo全面优化
  • 吴江城乡和住房建设局网站网站建设属于税收
  • 学校网站群建设 ppt旅游网站建设的目的及功能定位
  • 传输层协议分析
  • 开网站建设公司wordpress推荐好友
  • The Art of Scaling Reinforcement Learning Compute for LLMs