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

五、Python新特性指定类型用法

1. 什么是类型注解

类型注解是 Python 3.5+ 引入的特性,用于为变量、函数参数和返回值指定类型。它不会影响代码运行,但有助于代码可读性和 IDE 支持。


2. 基本类型注解

# 变量类型注解
name: str = "张三"
age: int = 25
height: float = 175.5
is_student: bool = True# 列表类型注解
numbers: list[int] = [1, 2, 3, 4, 5]
names: list[str] = ["张三", "李四", "王五"]# 字典类型注解
person: dict[str, str] = {"name": "张三", "city": "北京"}

3. 函数类型注解

def greet(name: str) -> str:return f"你好,{name}!"def add(a: int, b: int) -> int:return a + bdef get_user_info(name: str, age: int) -> dict[str, str]:return {"name": name, "age": str(age)}# 调用函数
result = greet("李四")  # 类型:str
sum_result = add(10, 20)  # 类型:int

4. 复杂类型注解

from typing import List, Dict, Tuple, Optional, Union# 列表类型
def process_numbers(numbers: List[int]) -> List[int]:return [x * 2 for x in numbers]# 字典类型
def update_user(user: Dict[str, str]) -> Dict[str, str]:user["updated"] = "true"return user# 元组类型
def get_coordinates() -> Tuple[int, int]:return (10, 20)# 可选类型(可能为 None)
def find_user(user_id: int) -> Optional[str]:if user_id == 1:return "张三"return None# 联合类型(多种可能类型)
def process_data(data: Union[str, int]) -> str:return str(data)

5. 类类型注解

class User:def __init__(self, name: str, age: int) -> None:self.name: str = nameself.age: int = agedef get_info(self) -> str:return f"{self.name}, {self.age}岁"# 使用类类型注解
def create_user(name: str, age: int) -> User:return User(name, age)user: User = create_user("王五", 30)

6. 泛型类型注解

from typing import TypeVar, GenericT = TypeVar('T')class Box(Generic[T]):def __init__(self, item: T) -> None:self.item: T = itemdef get_item(self) -> T:return self.item# 使用泛型
string_box: Box[str] = Box("hello")
int_box: Box[int] = Box(42)

7. 类型别名

from typing import List, Dict# 定义类型别名
UserId = int
UserName = str
UserList = List[Dict[str, str]]def get_users() -> UserList:return [{"id": "1", "name": "张三"},{"id": "2", "name": "李四"}]

8. 实际应用示例

from typing import List, Dict, Optionalclass Student:def __init__(self, name: str, scores: List[int]) -> None:self.name: str = nameself.scores: List[int] = scoresdef get_average(self) -> float:return sum(self.scores) / len(self.scores)def process_students(students: List[Student]) -> Dict[str, float]:result: Dict[str, float] = {}for student in students:result[student.name] = student.get_average()return result# 使用示例
students: List[Student] = [Student("张三", [85, 90, 78]),Student("李四", [92, 88, 95])
]averages: Dict[str, float] = process_students(students)
print(averages)  # 输出:{'张三': 84.33..., '李四': 91.66...}

9. 类型检查工具

可以使用 mypy 进行类型检查:

pip install mypy
mypy your_file.py

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

相关文章:

  • 【赵渝强老师】Oracle RMAN的目录数据库
  • 数据库-元数据表
  • 事务的原子性
  • 自建双因素认证器 2FAuth 完美替代 Google Auth / Microsoft Auth
  • CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
  • 虚拟机与容器技术详解:VM、LXC、LXD与Docker
  • HarmonyOS学习3---ArkUI
  • 《Redis》哨兵模式
  • ✨ OpenAudio S1:影视级文本转语音与语音克隆Mac整合包
  • 构建未来交互体验:AG-UI 如何赋能智能体与前端通信?
  • openai和chatgpt什么关系
  • hono框架绑定cloudflare的d1数据库操作步骤
  • 2025最新Telegram快读助手:一款智能Telegram链接摘要机器人
  • 【leetcode100】最长回文子串
  • 探索 .NET 桌面开发:WinForms、WPF、.NET MAUI 和 Avalonia 的全面对比(截至2025年7月)
  • MAX3485在MCU芯片AS32S601-485通信外设中的应用
  • Java 创建对象过程 JVM 内存分配并发安全笔记
  • 介绍Flutter
  • 2025最新软件测试面试八股文
  • 在SoC数据加解密验证中使用 Python 的 gmssl 库
  • 【论文笔记】OctoThinker:突破 Llama 推理瓶颈的中期训练范式
  • web前端面试-- MVC、MVP、MVVM 架构模式对比
  • 硬件嵌入式工程师学习路线终极总结(二):Makefile用法及变量——你的项目“自动化指挥官”!
  • WEB攻防-文件包含LFIRFI伪协议编码算法无文件利用黑白盒
  • Go语言的web框架--gin
  • NX二次开发——NX二次开发-检查点是否在面上或者体上
  • MyChrome.exe与Selenium联动避坑指南:User Data目录冲突解决方案
  • 一篇文章快速入门TypeScript基础语法
  • 超详细yolov8/11-segment实例分割全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • Zigbee/Thread