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

python-泛型实现,类型检查

python-泛型实现,类型检查

  • 泛型类型
  • 泛型类

在Python中,没有像Java中的泛型那样的明确语法来指定类型参数。Python是一种动态类型语言,可以灵活地处理不同类型的对象。
然而,如果你希望在Python中添加泛型的注释或提示,以提高代码的可读性和类型安全性,可以使用类型提示。类型提示是一种Python的特殊语法,用于指定变量、函数参数和返回值的类型信息。

要在Python中添加类型提示,你可以使用typing模块中的泛型类或泛型类型。下面是几个常用的泛型类型的示例:

List[T]: 表示元素类型为 T 的列表。 Dict[K, V]: 表示键类型为 K,值类型为 V 的字典。 Tuple[T1,
T2]: 表示包含两个元素,类型分别为 T1 和 T2 的元组。 Optional[T]: 表示类型为 T 或 None 的可选值

下面是一个示例,展示如何在Python中使用类型提示来指定泛型:

泛型类型

from typing import List, Dict, Optionaldef process_list(lst: List[int]) -> List[str]:result = []for num in lst:result.append(str(num))return resultdef process_dict(dct: Dict[str, int]) -> Dict[str, Optional[str]]:result = {}for key, value in dct.items():result[key] = str(value) if value is not None else Nonereturn result# 使用泛型类型注释定义列表
numbers: List[int] = [1, 2, 3, 4]
# 类型提示指示 process_list 函数接受 List[int] 并返回 List[str]
result_numbers: List[str] = process_list(numbers)
print(result_numbers)  # 输出: ['1', '2', '3', '4']# 使用泛型类型注释定义字典
scores: Dict[str, int] = {"Alice": 85, "Bob": 92, "Charlie": 78}
# 类型提示指示 process_dict 函数接受 Dict[str, int] 并返回 Dict[str, Optional[str]]
result_scores: Dict[str, Optional[str]] = process_dict(scores)
print(result_scores)  # 输出: {'Alice': '85', 'Bob': '92', 'Charlie': '78'}

泛型类

from typing import TypeVarT = TypeVar('T')  # 创建泛型类型变量 Tclass Box(Generic[T]):def __init__(self, item: T):self.item = itemdef get_item(self) -> T:return self.item# 创建一个装有整数的 Box
int_box = Box(5)
item = int_box.get_item()
print(item)  # 输出: 5
print(type(item))  # 输出: <class 'int'># 创建一个装有字符串的 Box
str_box = Box("Hello")
item = str_box.get_item()
print(item)  # 输出: Hello
print(type(item))  # 输出: <class 'str'>

请注意,在Python中,类型提示只是一种静态分析工具,而不会在运行时执行类型检查。因此,它们不会阻止你在运行时传递不匹配的类型。类型提示主要用于提供开发工具、编辑器和静态分析工具使用的类型信息,以帮助你编写更具可读性和可维护性的代码。

http://www.lryc.cn/news/239911.html

相关文章:

  • 黑马React18: Redux
  • visionOS空间计算实战开发教程Day 5 纹理和材质
  • 低代码PaaS开发平台
  • 阿里云99元服务器ECS经济型e实例性能如何?测评来了
  • vue3-生命周期
  • 23. 深度学习 - 多维向量自动求导
  • 挺扎心!好不容易有了一个offer,就因为背调出之前有仲裁记录,offer黄了,这已经是第二次了!...
  • 【brpc学习实践四】异步请求案例详解
  • git命令 cherry-pick
  • 手动添加扩展到composer中
  • TCP/IP
  • NX二次开发UF_CAM_set_clear_plane_data 函数介绍
  • 如何在 ASP.NET Core 中使用 Quartz.NET
  • 阿里云3M固定带宽服务器速度快吗?是否够用?
  • 跨越行业边界,CodeMeter护航AI领域安全与合规
  • 地磁传感器在城市交通智能监控系统的作用
  • 自动解决IP冲突的问题 利用批处理更改末位IP循环+1直到网络畅通为止 解放双手 事半功倍
  • 目标检测 Faster RCNN全面解读复现
  • HarmonyOS ArkTS 基础组件的使用(四)
  • elasticsearch 7安装
  • opencv 存储bgr格式/同理可类推yuv
  • [架构之路-248]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:如何用图形表达需求,结构化需求分析与面向对象需求分析的比较与融合
  • [数据结构]-AVL树
  • 内存池的面试整理
  • 优化记录 -- 记一次搜索引擎(SOLR)优化
  • 电力感知边缘计算网关产品设计方案-网关系统通信架构方案
  • RabbitMQ消息的可靠性
  • Opengl 纹理(知识点)
  • Centos 7 安装yum(针对python卸载yum出错)
  • substr()与substring()的区别