当前位置: 首页 > 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.dtcms.com/a/273883.html

相关文章:

  • c++设计模式:抽象工厂模式
  • 【unity游戏开发——优化篇】Unity6.2新功能介绍——Mesh LOD的使用
  • Redis数据类型之list
  • Vue3的组件通信方式
  • (1-7-2)Mysql 数据表的相关操作
  • ollama大模型spring单机集成
  • 输入输出练习
  • C++入门基础篇(二)
  • 【C语言网络编程】HTTP 客户端请求(域名解析过程)
  • P9755 [CSP-S 2023] 种树
  • 浮点测试初探
  • Genus:设计信息结构以及导航方式(路径种类)
  • Java中的泛型继承
  • 【C语言进阶】带你由浅入深了解指针【第四期】:数组指针的应用、介绍函数指针
  • 【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册
  • mysql的LIMIT 用法
  • 1 APP-OneNET 生成token密钥
  • Ubuntu2404修改国内镜像
  • 我的第一个开源项目|Geex:道阻且长的开源之路
  • docker的学习
  • React中Redux基础和路由介绍
  • 将手工建模模型(fbx、obj)转换为3dtiles的免费工具!
  • threejs案例开发-中国3D国旗动画
  • PostgreSQL 查询库中所有表占用磁盘大小、表大小
  • [Meetily后端框架] 多模型-Pydantic AI 代理-统一抽象 | SQLite管理
  • 共享储能电站在工业用户经济调度中的matlab仿真
  • 需求升级,创新破局!苏州金龙赋能旅游客运新生态
  • Go中使用wire进行统一依赖注入管理
  • 【JavaScript高级】构造函数、原型链与数据处理
  • 3 OneNET-调试器模拟上报数据