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

相关文章:

  • AI大模型(六)Langchain核心模块与实战(一)
  • 使用LVM和扩展文件系统增加root分区存储容量
  • 信号和槽(4)
  • 3dmax物理材质转换标准材质,物理材质转VR材质,VR材质转标准材质3dmax物理材质转标准材质插件
  • 98.验证二叉搜索树
  • python实现简单的地图绘制与标记20250705
  • 【每天一个知识点】子空间聚类(Subspace Clustering)
  • 零基础保姆级本地化部署文心大模型4.5开源系列
  • Unity文件夹标签 —— FolderTag
  • SpinLock (TTAS) C-A-S 自旋锁实现原理
  • 人工智能学习60-Yolo
  • TCP协议概念和特性
  • cmd 的sftp传输;Conda出现环境问题: error: invalid value for --gpu-architecture (-arch)
  • Kotlin 协程:Channel 与 Flow 深度对比及 Channel 使用指南
  • 《自然语言处理:基于预训练模型的方法》-笔记
  • Java教程——深入学习guava之并发编程
  • 基于matlab的二连杆机械臂PD控制的仿真
  • 2025年5月-植物水分吸收和运输优化算法water uptake and transport-附Matlab免费代码
  • 数字地和模拟地
  • 使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
  • 白皮解读——173页数据安全治理白皮书5.0【附全文阅读】
  • 灵活应对市场波动的智能运营中枢​
  • leetcode918.环形子数组的最大和
  • Spark SQL架构及高级用法
  • Java Go SDK 管理工具与最佳实践
  • 【汇编逆向系列】九、函数传参之结构体 - SHL、SHR指令,小型结构体参数和返回值
  • 《深度剖析:5G网络切片如何精准保障不同业务QoS需求》
  • PHP语法基础篇(九):正则表达式
  • 本机上搭一个HTTPS网站用什么工具?.NET self host支持吗?
  • Redis--黑马点评--达人探店功能实现详解