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

python的类型注解讲解

一.什么是类型注解

类型注解(Type Hints) 是一种在 Python 代码中为变量、函数参数和返回值添加类型信息的方式。它类似于给代码写“说明书”,告诉开发者和工具:“这个变量应该是整数,这个参数应该是字符串,这个函数应该返回布尔值”。

Python 是动态类型语言:变量可以随时改变类型,比如 x = 5 后再写 x = “hello” 是合法的。
类型注解的作用:它只是“建议”或“提示”,不会强制限制类型。它的主要目的是帮助开发者提前发现潜在问题,并通过工具(如 mypy)进行静态检查。

二.类型注解的作用

  • 提高代码可读性
    通过类型注解,开发者可以快速理解变量或函数的预期用途。
    例如:def add(a: int, b: int) -> int 比未注解的函数更清晰。
  • 静态类型检查
    使用工具(如 mypy)可以在代码运行前检查类型错误。
    例如:如果函数参数被注解为 int,但调用时传入了 str,工具会提前报错。
  • IDE 智能支持
    IDE(如 PyCharm、VS Code)可以根据类型注解提供更准确的代码补全、重构建议。
  • 团队协作
    在大型项目中,类型注解能减少误解和错误,降低维护成本。

三.类型注解的语法介绍

3.1 变量类型的注解

  • 语法
    语法:变量名: 类型 = 值
name: str = "Alice"      # name 应该是字符串
age: int = 30            # age 应该是整数
is_active: bool = True   # is_active 应该是布尔值

3.2 函数参数和返回值注解

  • 语法
    语法:def 函数名(参数: 类型) -> 返回类型:
def greet(name: str) -> str:  # name 是字符串,返回值也是字符串return f"Hello, {name}!"def add(a: int, b: int) -> int:  # a 和 b 是整数,返回值也是整数return a + b

3.3 复杂类型注解

  • 语法
    需要从 typing 模块导入工具来表示更复杂的类型:
from typing import List, Dict, Tuple, Optional, Union# 列表:元素类型是 int
numbers: List[int] = [1, 2, 3]# 字典:键是 str,值是 int
user: Dict[str, int] = {"Alice": 30, "Bob": 25}# 元组:两个 float 类型
coordinates: Tuple[float, float] = (10.5, 20.7)# 可选类型(可能为 None)
email: Optional[str] = None  # 等价于 str | None(Python 3.10+)# 联合类型(可以是多种类型之一)
def print_value(value: Union[int, str]) -> None:print(value)

3.4 类属性注解

class Person:name: str  # name 是字符串age: int   # age 是整数def __init__(self, name: str, age: int):self.name = nameself.age = age

3.5 泛型注解

from typing import TypeVar, ListT = TypeVar('T')  # 定义一个泛型类型 Tdef first_element(items: List[T]) -> T:return items[0]# 使用泛型函数
numbers: List[int] = [1, 2, 3]
first_number: int = first_element(numbers)  # 返回类型是 intnames: List[str] = ["Alice", "Bob"]
first_name: str = first_element(names)  # 返回类型是 str

3.6 类型别名

from typing import List, Dict, TupleVector = List[float]         # Vector 是浮点数列表的别名
User = Dict[str, str | int]  # User 是字典的别名def scale_vector(vector: Vector, factor: float) -> Vector:return [x * factor for x in vector]
http://www.xdnf.cn/news/1101871.html

相关文章:

  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(中)
  • 电力自动化的通信中枢,为何工业交换机越来越重要?
  • NLP_知识图谱_大模型——个人学习记录
  • CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
  • LVS-NAT模式配置
  • Java语言基础
  • Windos服务器升级MySQL版本
  • 从Excel到PDF一步到位的台签打印解决方案
  • 5G标准学习笔记14 - CSI--RS概述
  • 《磁力下载工具实测:资源搜索+高速下载一站式解决方案》
  • P1204 [USACO1.2] 挤牛奶Milking Cows
  • 【Linux】GDB/CGDB 调试器学习笔记
  • 实现在线预览pdf功能,后台下载PDF
  • 【web应用】若依框架中,使用Echarts导出报表为PDF文件
  • SSL与HTTP概述
  • 【网络编程】KCP——可靠的 UDP 传输协议——的知识汇总
  • 华为VS格行VS中兴VS波导随身WIFI6怎么选?流量卡OR随身WIFI,长期使用到底谁更香?
  • leetcode 3169. 无需开会的工作日 中等
  • day02-数组part02
  • 【LeetCode 热题 100】146. LRU 缓存——哈希表+双向链表
  • 十年架构心路:从单机到云原生的分布式系统演进史
  • OcsNG基于debian一键部署脚本
  • 老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
  • JVM--监控和故障处理工具
  • 正义的算法迷宫—人工智能重构司法体系的技术悖论与文明试炼
  • 区块链应用场景深度解读:从金融革命到社会治理的全方位革新
  • spark3 streaming 读kafka写es
  • 使用浏览器inspect调试wx小程序
  • 【HTML】俄罗斯方块(精美版)
  • AI产品经理面试宝典第7天:核心算法面试题-上