首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 10章 编写高效的函数
10.1 函数名
10.2 函数大小的权衡
10.3 函数的形参和实参
10.3.1 默认参数
10.3.2 使用*和**向函数传参
10.3.3 使用*创建可变参数函数
10.3.4 使用**创建可变参数函数
10.3.5 使用*和**创建包装函数
10.4 函数式编程
10.4.1 副作用
10.4.2 高阶函数
10.4.3 lambda 函数
10.4.4 在列表推导式中进行映射和过滤
10.5 返回值的数据类型应该不变
10.6 抛出异常和返回错误码
第 11章 注释、文档字符串和类型提示
11.1 注释
11.1.1 注释风格
11.1.2 内联注释
11.1.3 说明性的注释
11.1.4 总结性的注释
11.1.5 “经验之谈”的注释
11.1.6 法律注释
11.1.7 注释的专业性
11.1.8 代码标签和TODO 注释
11.1.9 神奇的注释和源文件编码
11.2 文档字符串
11.3 类型提示
11.3.1 使用静态分析器
11.3.2 为多种类型设置类型提示
11.3.3 为列表、字典等设置类型提示
11.3.4 通过注释向后移植类型提示
第 12章 通过Git管理项目
12.1 Git 提交和仓库
12.2 使用Cookiecutter新建Python项目
12.3 安装Git
12.3.1 配置Git 用户名和电子邮件
12.3.2 安装GUI Git 工具
12.4 Git 的工作流程
12.4.1 Git 是如何追踪文件状态的
12.4.2 为什么要暂存文件
12.5 在计算机上创建Git 仓库
12.5.1 添加供Git 追踪的文件
12.5.2 忽略仓库中的文件
12.5.3 提交修改
12.5.4 从仓库中删除文件
12.5.5 重命名和移动仓库中的文件
12.6 查看提交日志
12.7 恢复历史修改
12.7.1 撤销未提交的本地修改
12.7.2 取消暂存的文件
12.7.3 回滚近期的提交
12.7.4 回滚到单个文件的某次提交
12.7.5 重写提交历史
12.8 GitHub 和git推送命令
12.8.1 将一个已存在的仓库推送到GitHub
12.8.2 克隆已存在的GitHub仓库
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(四)
小册名称:Python编程轻松进阶(四)
### 11.3.2 为多种类型设置类型提示 在Python编程的进阶旅程中,掌握类型提示(Type Hints)是提升代码质量、可读性和可维护性的重要一步。随着Python 3.5及以后版本的推广,PEP 484引入了类型提示作为官方支持的特性,允许开发者为函数参数、返回值以及变量等指定期望的类型。这不仅有助于静态类型检查工具(如mypy)发现并预防潜在的错误,还能在IDE中提供智能提示,提升开发效率。本章节将深入探讨如何为多种类型设置类型提示,涵盖基本类型、容器类型、泛型、Union类型、Optional类型等,帮助读者在Python编程中灵活运用类型提示。 #### 11.3.2.1 基本类型类型提示 基本类型包括整数(int)、浮点数(float)、布尔值(bool)、字符串(str)等。为这些类型设置类型提示非常直接,只需在变量名或函数参数/返回值后加上冒号和相应的类型名即可。 ```python def add_numbers(a: int, b: int) -> int: return a + b name: str = "Alice" is_valid: bool = True ``` #### 11.3.2.2 容器类型类型提示 容器类型如列表(list)、元组(tuple)、字典(dict)和集合(set)在Python中非常常见,为它们设置类型提示时,需要指定容器内元素的类型。 - **列表(List)**:使用`typing.List`(在Python 3.9及以上版本中,可以直接使用`list[T]`,其中`T`是列表元素的类型)。 ```python from typing import List def process_names(names: List[str]) -> None: for name in names: print(name.upper()) # 或者使用Python 3.9+的语法 def process_names_py39(names: list[str]) -> None: ... ``` - **元组(Tuple)**:使用`typing.Tuple`,可以指定元组中每个元素的具体类型,或者仅指定元组内所有元素的一般类型。 ```python from typing import Tuple def get_coordinates() -> Tuple[int, int, float]: return 1, 2, 3.14 # 通用类型元组 def get_mixed_tuple() -> Tuple[str, ...]: return ("apple", "banana", "cherry") ``` - **字典(Dict)**:使用`typing.Dict`,指定键和值的类型。 ```python from typing import Dict def update_user_info(info: Dict[str, str]) -> None: info['email'] = 'example@example.com' # Python 3.9+ 简化语法 def update_user_info_py39(info: dict[str, str]) -> None: ... ``` - **集合(Set)**:使用`typing.Set`,指定集合元素的类型。 ```python from typing import Set def filter_unique_numbers(numbers: Set[int]) -> Set[int]: return {n for n in numbers if n % 2 == 0} ``` #### 11.3.2.3 泛型(Generics) 泛型允许定义灵活的函数或类,这些函数或类可以工作于任何类型上。使用泛型时,通常需要导入`typing`模块中的`TypeVar`、`Generic`等。 ```python from typing import TypeVar, Generic, List T = TypeVar('T') class Box(Generic[T]): def __init__(self, value: T) -> None: self.value = value def get_value(box: Box[T]) -> T: return box.value # 使用示例 b = Box(10) print(get_value(b)) # 输出 10 ``` #### 11.3.2.4 Union类型 当变量或函数参数/返回值可能是多种类型之一时,可以使用`typing.Union`(或Python 3.10引入的`|`操作符作为类型联合的简化语法)来指定。 ```python from typing import Union def handle_data(data: Union[str, int, float]) -> None: # 处理数据 pass # Python 3.10+ 简化语法 def handle_data_py310(data: str | int | float) -> None: # 处理数据 pass ``` #### 11.3.2.5 Optional类型 有时,函数参数或返回值可能不存在(即`None`),此时可以使用`typing.Optional`(或Python 3.10引入的`|`操作符与`None`联合)来明确表示这种情况。 ```python from typing import Optional def find_user(user_id: int) -> Optional[str]: # 假设这里有一些查找逻辑 return None # 如果没有找到用户 # Python 3.10+ 简化语法 def find_user_py310(user_id: int) -> str | None: # 查找逻辑 return None ``` #### 11.3.2.6 进阶用法:类型别名与NewType - **类型别名**:在复杂的类型签名中,使用类型别名可以提高代码的可读性。 ```python from typing import List, Dict UserInfo = Dict[str, str] UserList = List[UserInfo] def process_users(users: UserList) -> None: ... ``` - **NewType**:`typing.NewType`用于创建一个与现有类型相同的新类型,主要用于类型安全的目的,防止不同类型的值被误用。 ```python from typing import NewType UserId = NewType('UserId', int) def assign_role(user_id: UserId, role: str) -> None: ... # 使用时必须明确指定UserId类型 assign_role(UserId(123), "admin") ``` #### 总结 通过本章的学习,我们了解了如何在Python中为多种类型设置类型提示,包括基本类型、容器类型、泛型、Union类型、Optional类型以及类型别名和NewType的进阶用法。这些技巧将帮助你在编写Python代码时,更好地利用类型提示来提升代码质量、可读性和可维护性。随着Python类型系统的不断完善和IDE对类型提示支持的加强,掌握这些技能将越来越重要。希望本章内容能为你在Python编程进阶之路上提供有力的支持。
上一篇:
11.3.1 使用静态分析器
下一篇:
11.3.3 为列表、字典等设置类型提示
该分类下的相关小册推荐:
Python与办公-玩转Word
Python合辑10-函数
Python机器学习实战
Python3网络爬虫开发实战(下)
Python爬虫入门与实战开发(下)
Python合辑1-Python语言基础
Python编程轻松进阶(三)
Python面试指南
Python编程轻松进阶(一)
Python高性能编程与实战
Python合辑2-字符串常用方法
Python合辑7-集合、列表与元组