首页
技术小册
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.3 为列表、字典等设置类型提示 在Python编程中,随着Python 3.5及以上版本对类型注解(Type Hints)的支持日益完善,为变量、函数参数以及返回值等添加类型信息成为了提升代码可读性、可维护性和增强IDE(集成开发环境)辅助能力的重要手段。尽管Python是一种动态类型语言,但在复杂的项目中,明确的类型信息能够帮助开发者更好地理解代码意图,促进团队协作,并且有助于静态类型检查工具(如mypy)发现潜在的错误。本章节将深入探讨如何为Python中的列表、字典等复杂数据结构设置类型提示,以及这样做带来的好处。 #### 11.3.3.1 列表(List)的类型提示 列表是Python中最常用的数据结构之一,用于存储一系列的元素。为列表设置类型提示时,我们需要指明列表中存储元素的类型。Python的`typing`模块为此提供了强大的支持。 ##### 基本用法 - **单类型列表**:如果列表中的所有元素都是同一种类型,我们可以直接使用类型注解加方括号`[]`来表示。 ```python from typing import List # 定义一个整数列表 my_int_list: List[int] = [1, 2, 3, 4, 5] # 定义一个字符串列表 my_str_list: List[str] = ["apple", "banana", "cherry"] ``` - **嵌套列表**:如果列表中的元素是另一个列表,我们需要指明嵌套列表的元素类型。 ```python # 定义一个整数嵌套列表 nested_int_list: List[List[int]] = [[1, 2], [3, 4], [5, 6]] ``` ##### 复杂情况 - **列表的元素类型可变**:虽然类型提示鼓励明确性,但在某些情况下,列表可能需要在运行时包含不同类型的元素。对于这种情况,可以使用`Union`类型(来自`typing`模块)来指定多种可能的类型。 ```python from typing import List, Union # 列表可以包含整数或字符串 mixed_list: List[Union[int, str]] = [1, "two", 3, "four"] ``` - **列表的泛型类型参数**:在高级用法中,可以利用泛型(Generics)来定义更加灵活的类型提示,特别是当函数需要返回特定类型的列表时。 ```python from typing import TypeVar, List T = TypeVar('T') # 定义一个类型变量T def create_list(element: T, n: int) -> List[T]: """创建并返回一个包含n个给定元素的列表""" return [element] * n # 使用示例 int_list = create_list(1, 5) # 类型推断为List[int] str_list = create_list("a", 3) # 类型推断为List[str] ``` #### 11.3.3.2 字典(Dictionary)的类型提示 字典是Python中另一种重要的数据结构,用于存储键值对。为字典设置类型提示时,需要分别指定键(Key)和值(Value)的类型。 ##### 基本用法 - **单类型键值对**:使用`Dict`类型(来自`typing`模块),并指定键和值的类型。 ```python from typing import Dict # 定义一个字典,键为str,值为int my_dict: Dict[str, int] = {"age": 30, "height": 175} ``` - **嵌套字典**:如果字典的值是另一个字典,需要指定嵌套字典的键和值类型。 ```python # 定义一个嵌套字典,外层键为str,值为另一个字典,内层字典的键为str,值为int nested_dict: Dict[str, Dict[str, int]] = { "person1": {"age": 25, "salary": 50000}, "person2": {"age": 30, "salary": 60000} } ``` ##### 复杂情况 - **使用`TypedDict`**:对于需要严格指定字典中哪些键存在以及它们对应值的类型的场景,`typing`模块中的`TypedDict`非常有用。`TypedDict`可以创建一个类似字典的类,其中键是字面量类型。 ```python from typing import TypedDict class Person(TypedDict): name: str age: int # 使用TypedDict person: Person = {"name": "Alice", "age": 30} # 尝试添加不在TypedDict定义中的键会导致类型检查错误 # person["height"] = 175 # 这将触发类型错误 ``` - **混合类型键或值**:如果字典的键或值有多种可能的类型,可以使用`Union`类型来指定。 ```python from typing import Dict, Union # 字典的键可以是str或int,值可以是任何类型 mixed_key_dict: Dict[Union[str, int], any] = {"name": "Bob", 1: [1, 2, 3]} # 注意:在Python 3.9及更高版本中,使用`any`作为类型注解是不推荐的,应明确指定类型或使用`object`代替。 # 更合适的做法是使用`object`或更具体的类型。 # mixed_key_dict: Dict[Union[str, int], object] = ... ``` #### 11.3.3.3 实践与好处 为列表、字典等复杂数据结构设置类型提示,不仅有助于提升代码的可读性和可维护性,还能使IDE和静态类型检查工具(如mypy)更好地理解代码结构,从而在编写阶段就发现潜在的错误。例如,IDE可以基于类型提示提供自动补全功能,静态类型检查工具则能够在代码运行前指出类型不匹配等问题。 此外,随着Python生态系统中对类型注解支持的不断增强,越来越多的第三方库和框架开始利用类型注解来改进API设计,提升开发效率。因此,掌握并应用类型提示,对于任何希望在Python领域深入发展的开发者来说,都是一项重要的技能。 综上所述,为列表、字典等复杂数据结构设置类型提示,是现代Python编程中的一项重要实践,它不仅能够提升代码质量,还能促进更加高效和协同的软件开发过程。
上一篇:
11.3.2 为多种类型设置类型提示
下一篇:
11.3.4 通过注释向后移植类型提示
该分类下的相关小册推荐:
Python编程轻松进阶(一)
Python数据分析与挖掘实战(上)
Python合辑10-函数
Python合辑9-判断和循环
Python机器学习基础教程(下)
Python3网络爬虫开发实战(下)
Selenium自动化测试实战
Python高并发编程与实战
Python合辑11-闭包函数
剑指Python(磨刀不误砍柴工)
Python与办公-玩转Excel
Python爬虫入门与实战开发(下)