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

Python 类型注释 - typing

文章目录

  • Python 类型注释
  • 简述
  • 用法说明
    • 基本类型
    • 容器类型
    • 特殊类型
    • 嵌套
  • 用法案例
    • 普通变量
    • 类成员
    • 函数参数
    • 函数返回类型
  • 效果
  • 参考资料

Python 类型注释

简述

Python 语言经常被人“诟病”的一个点就是类型,在变量定义、参数传递、参数返回时,由于没有类型常常会很困惑,导致开发效率下降。

Python 的 typing 包是从 Python 3.5 版本引入的标准库,它提供了类型提示和类型注解的功能,可用于对代码进行静态类型检查(结合IDE,如Pycharm)和类型推断。typing模块中定义了多种类型和泛型,以帮助提高开发者代码的可读性、可维护性和可靠性。

注:本文档的案例、语法、使用方式等基于 Python 3.8。

用法说明

在类型注释部分,分为基本类型注释,容器类型注释,特殊类型

基本类型

基本类型包含 bool, int, float, str, bytes,与参数、变量和函数返回值一起使用。这几个类型不需要从typing中import。

a : int
b : bool
c : float
d : str
e : bytes

容器类型

容器类型包含 List, Dict, Set, Tuple,分别用于对 Python 中的列表、字典、集合、元组做类型注释。这几个类型需要从typing中import才可使用。

  • List

列表内存储对象的数据类型需标注在方括号内,以存储 int 的列表为例,则需标注为 List[int]。

lst : List[int]
  • Dict

字典是以键值对的方式来存储数据的,那么在标注类型的时候,需在方括号内标注键和值的类型。以键为 int 类型、值为 str 类型的字典为例,则需标注为 Dict[int, str]。

dict : Dict[int, str]
  • Set

与列表类似,内部存储元素的数据类型需标注在方括号内,以存储 int 的集合为例,则需标注为 Set[int]。

def func(att : Set[int]):print(att)if __name__ == "__main__":s = {1, 2, 3}func(s)
  • Tuple

元组的类型标注需要在方括号中依次给出类型,也可以使用…允许将数量未知的元素包括在 Tuple 的类型标注中。

def func(att : Tuple[int, str, float]):print(att)if __name__ == "__main__":tup = (1, 'str', 1.2)func(tup)

特殊类型

特殊一点的类型有:自定义的类型、None、Any、Union、Optional等。

  • 自定义类型

如自定义了一个dataclass,用来表示某数据库表中id和对应数据,如下:

@dataclass
class Geometry:"""代表 data 表中的一条数据Attributes:id - data 表中的 iddata - geometry 对应的二进制几何数据"""id: bytesdata: bytes

如果要标注类型为 Geometry 的数据,则需将Geometry从对应的.py中引入,之后便可直接标注该类型:

def f(g: Geometry):print(g)geoms : List[Geometry]
  • None

无需从 typing 中导入,与 int, str 等类似,常用于标注函数返回。

如在没有返回值的函数中,对于返回类型可标注为 None,如下:

def func(att : Set[int]) -> None:print(att)
  • Any

表示没有约束的类型,所有类型都与 Any 兼容,Any 与所有类型都兼容。未指定返回值与参数类型的函数,都隐式地默认使用 Any

  • Union

表示 联合类型,需要从 typing 中 import 后使用,类似C++中的联合体。Union表示多个类型中的其中一个,如某值的类型可能是int, str, float之一,则可写为Union[int, str, float]:

def fun(att : Union[int, str, float]):print(att)if __name__ == "__main__":fun(1)fun('123')fun(1.23)
  • Optional

表示可选类型,表示一个值可以为指定类型或None。Optional[X] 等价于 Union[X, None]。

在某数据表中,对于某字段值可有可无。若无该字段,则应为None;若有,则单位的类型为str,因此可以写为:

field: Optional[str] = None

嵌套

在进行类型标注时,允许做类型的嵌套,在做类型的嵌套时,前面提到的任意容器类型之间可以嵌套。如:

data: List[Tuple[str, str]]

用法案例

普通变量

a : int
b : bool
c : float
d : str
e : bytes

表示 a 为 int, b 为 bool, c 为 float, d 为 str, e 为 bytes。

当对已添加类型注释的变量赋予错误的类型值时,在Pycharm 中会给出提示:

image.png

类成员

对类中各个成员的类型的注释与普通变量的注释格式相同,如定义一个表示属性的结构:

@dataclass
class Property:"""代表一个属性Attributes:id - 属性 的 idname - 属性 的 namevalue - 属性 的 valueunit - 属性 的 单位"""id: strname: strvalue: Union[str, Tuple[str, str]]unit: Optional[str] = None

函数参数

类型注释中比较常用的场景之一,对于参数列表中的各个参数做注释。

如有一段解析某 xml 的函数,其入参即为 xml的绝对路径,因此在相关逻辑中,即可将参数标记为str:

def parse_xml(xml_path: str):...

函数返回类型

类型注释中比较常用的场景之一,用于标记某函数到底返回了什么类型的参数。

在Python中定义函数时:

def func_name(param_list):func_impl

对于返回值的注释,放在函数定义的圆括号之后,冒号之前并且写法是:-> type

如有一个比对两个类型为float的数据是否相等的逻辑,返回值类型应为 bool,则函数定义为:

def compare_float(a: float, b: float) -> bool:"""对比两个float是否相等Parameters:a - 需对比的第一个float数值b - 需对比的第二个float数值Returns:如果两个float相等则返回 True, 否则返回 False"""...

效果

  • 给出类型提示

image.png

当写完一个函数名称之后,Pycharm会自动提醒该写入的参数类型

  • 给出错误提示

以函数,当指定一个参数的类型之后,若实际传递的参数类型与标注不符,则会得到提示:

image.png

参考资料

  • typing — Support for type hints — Python 3.8.20 documentation
http://www.xdnf.cn/news/876169.html

相关文章:

  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • Seata 分布式事务安装配置集成实战
  • Git忽略规则.gitignore不生效解决
  • 突破模型成本瓶颈:MoE如何让专业大模型更易用?​
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • PH热榜 | 2025-06-04
  • Facebook接入说明
  • JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?
  • 群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
  • 列出浏览器所有的启动参数,并解释说明每个参数的含义
  • 行为型-模板模式
  • 【高校论文】DFORMER重新思考用于语义分割的RGBD表示学习[南开国防科大]
  • 电路图识图基础知识-直接启动/接触器启动(十四)
  • 分布式训练下的多进程环境
  • [Java 基础]枚举
  • NLP中的input_ids是什么?
  • Pycharm 配置解释器
  • mybatis实现插入postgresql的json类型数据
  • DA14531_beacon_大小信标设备开发
  • 如何安装并使用RustDesk
  • Java Fork/Join框架:三大核心组件深度解析
  • 功率估计和功率降低方法指南(1~2)
  • 2025年6月4日收获
  • 如何进行股票回测?
  • 第三方检测:软件适配测试报告
  • SAFe/LeSS/DAD等框架的核心适用场景如何选择?
  • Paraformer分角色语音识别-中文-通用 FunASR
  • SEO长尾关键词布局优化法