python-泛型实现,类型检查

news/2024/11/28 4:16:59/

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.ppmy.cn/news/1233926.html

相关文章

双11再创新高!家电行业如何通过矩阵管理,赋能品牌增长?

双11大促已落下帷幕&#xff0c;虽然今年不再战报满天飞&#xff0c;但从公布的数据来看&#xff0c;家电行业整体表现不俗。 根据抖音电商品牌业务发布的收官战报&#xff0c;家电行业创造了成交新纪录&#xff0c;整体同比增长125%。快手官方数据显示&#xff0c;消电家居行业…

三维控件中定位一个点_vtkPointWidget

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题&#xff1a;允许用户使用三维光标在三维空间中定位一个点。关键类vtkPointWidget , 光标具有轮廓边界框、轴对齐十字准线和轴阴影&#xff…

java_函数式接口

文章目录 一、什么是函数式接口二、四大核心函数式接口三、使用举例 一、什么是函数式接口 如果一个接口只有一个抽象方法&#xff0c;那么该接口就是一个函数式接口函数式接口的实例可以通过 lambda 表达式、方法引用或者构造方法引用来创建如果我们在某个接口上声明了 Funct…

LINUXZ

10.6.2 AT24C02 访问方法 设备地址 从芯片手册上可以知道&#xff0c;AT24C02 的设备地址跟它的 A2、A1、A0 引脚有关&#xff1a; 图 10.36 AT24C02 设备地址引脚配置 294 / 577 打开 I2C 模块的原理图&#xff1a; 开发板配套网盘资料\04_开发板原理图\ 04_Extend_modules\通…

ubuntu 20.04如何切换gcc/g++/python的版本

ubuntu 20.04如何切换gcc/g/python的版本 1 安装gcc/g/python2 设置gcc/g/python的备选项3 选择当前系统要使用的gcc/g/python版本3.1 切换gcc/g/python版本3.2 切换示例 当系统同时存在gcc-9以及gcc-10时该如何切换让当前的系统gcc版本指向gcc-9或是gcc-10呢&#xff1f;g也同…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第五章 组件库安装和使用(Element-Plus基础配置)

系列文章目录&#xff08;点击查看&#xff09; 文章目录 系列文章目录&#xff08;点击查看&#xff09;前言一、安装二、快速开始三、自动引入1、首先你需要安装 unplugin-vue-components 和 unplugin-auto-import 这两款插件2、在 vite.config.ts 文件中添加如下代码 四、自…

力扣.面试题 04.06. 后继者(java 树的中序遍历)

Problem: 面试题 04.06. 后继者 文章目录 题目描述思路解题方法复杂度Code 题目描述 设计一个算法&#xff0c;找出二叉搜索树中指定节点的“下一个”节点&#xff08;也即中序后继&#xff09;。 如果指定节点没有对应的“下一个”节点&#xff0c;则返回null。 思路 由于题…

关于 Docker

关于 Docker 1. 术语Docker Enginedockerd&#xff08;Docker daemon&#xff09;containerdOCI (Open Container Initiative)runcDocker shimCRI (Container Runtime Interface)CRI-O 2. 容器启动过程在 Linux 中的实现daemon 的作用 Docker 是个划时代的开源项目&#xff0c;…