首页
技术小册
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 类型提示:提升Python代码质量与可维护性 在Python编程的进阶之旅中,类型提示(Type Hints)是一个不可忽视的重要特性。自Python 3.5版本引入以来,类型提示不仅增强了代码的可读性和可维护性,还为实现静态类型检查、提高代码质量和促进团队协作提供了强大的支持。本章节将深入探讨类型提示的基本概念、使用方法、以及它如何助力Python程序的进阶开发。 ### 11.3.1 类型提示基础 #### 11.3.1.1 为什么要使用类型提示? Python作为一种动态类型语言,其灵活性是众所周知的。然而,这种灵活性也带来了一些挑战,比如难以在编写时捕获类型相关的错误,增加了调试的复杂性和时间成本。类型提示提供了一种在代码中显式标注变量、函数参数和返回值类型的方式,使得开发者、代码审查者以及未来的自己能够更容易地理解代码的意图和结构,同时也为静态类型检查工具(如mypy)提供了必要的信息,从而在不牺牲Python灵活性的前提下,提高代码的可靠性和维护性。 #### 11.3.1.2 类型提示的语法 Python中的类型提示使用函数注解(Function Annotations)的语法,但并非用于执行类型检查,而是作为对代码的一种说明。基本语法如下: ```python def greet(name: str) -> str: return "Hello, " + name # 使用类型别名 from typing import List, Dict def process_data(items: List[Dict[str, int]]) -> None: for item in items: # 处理每个字典项 pass ``` 在上述例子中,`greet`函数的参数`name`被标注为`str`类型,表示该函数期望接收一个字符串作为参数;返回类型被标注为`str`,表明该函数将返回一个字符串。`process_data`函数则展示了如何使用`List`和`Dict`作为类型提示,以及这些类型内部元素的类型指定。 ### 11.3.2 进阶使用 #### 11.3.2.1 泛型(Generics) 泛型允许你定义与类型参数一起工作的类或函数,这些类型参数在类被实例化或函数被调用时指定。Python的`typing`模块提供了多种泛型类型,如`List[T]`、`Dict[KT, VT]`等,其中`T`、`KT`、`VT`代表类型变量。 ```python from typing import Generic, TypeVar T = TypeVar('T') class Box(Generic[T]): def __init__(self, value: T) -> None: self.value = value def get(self) -> T: return self.value # 使用Box int_box = Box[int](42) str_box = Box[str]("hello") ``` #### 11.3.2.2 可选类型与Union 在处理可能为`None`的值时,可以使用`typing.Optional`来标注该值可能为指定类型或`None`。`Optional`是`Union[T, NoneType]`的别名,其中`T`是任何类型。 ```python from typing import Optional def find_user(user_id: int) -> Optional[str]: # 假设这里有一些逻辑来查找用户名 return None # 假设没有找到用户 # 或者使用Union直接 from typing import Union def find_user_union(user_id: int) -> Union[str, None]: # 同上 return None ``` #### 11.3.2.3 类型别名 为了简化复杂类型的表示,可以使用`type`关键字或`typing`模块中的别名功能来定义类型别名。 ```python from typing import List, Tuple # 使用type Vector = List[float] # 使用typing模块的TypeAlias(Python 3.10+) from typing import TypeAlias VectorAlias: TypeAlias = List[float] # 复杂的类型别名 UserRecord = Tuple[int, str, List[str]] ``` ### 11.3.3 静态类型检查与mypy 虽然Python解释器本身不执行类型检查,但你可以使用第三方工具如mypy来静态地分析你的代码,查找潜在的类型错误。mypy会根据你的类型提示来检查代码,并报告不一致之处,如参数类型不匹配、返回类型错误等。 #### 安装mypy ```bash pip install mypy ``` #### 使用mypy 在你的项目根目录下运行mypy,可以指定要检查的文件或目录。 ```bash mypy my_script.py # 或者 mypy my_project_directory ``` ### 11.3.4 实战案例:提升代码质量 假设你正在开发一个处理用户信息的系统,其中包含多个函数用于验证、转换和存储用户数据。通过引入类型提示,你可以显著提高代码的可读性和健壮性。 ```python from typing import Dict, List, Tuple, Optional def validate_user_info(username: str, email: str) -> Optional[str]: # 验证用户名和邮箱,返回错误信息或None pass def process_users(users: List[Dict[str, str]]) -> Tuple[List[str], List[str]]: valid_usernames = [] invalid_usernames = [] for user in users: error = validate_user_info(user['username'], user['email']) if error: invalid_usernames.append(user['username']) else: valid_usernames.append(user['username']) return valid_usernames, invalid_usernames # 示例使用 users = [ {'username': 'alice', 'email': 'alice@example.com'}, {'username': 'bob', 'email': 'invalid-email'}, ] valid, invalid = process_users(users) print("Valid usernames:", valid) print("Invalid usernames:", invalid) ``` 在上面的代码中,通过明确指定函数参数和返回值的类型,不仅让代码更加清晰,还为后续的维护和扩展提供了便利。此外,使用mypy进行静态类型检查可以确保这些类型注解的一致性,从而减少运行时错误。 ### 11.3.5 总结 类型提示是Python编程中一个强大的特性,它能够在不牺牲Python动态性的前提下,提升代码的可读性、可维护性和健壮性。通过合理使用类型提示,你可以编写出更加清晰、易于理解和维护的代码。同时,结合静态类型检查工具如mypy,还可以进一步减少潜在的错误,提高代码质量。在Python编程的进阶之路上,掌握并熟练运用类型提示无疑是一项宝贵的技能。
上一篇:
11.2 文档字符串
下一篇:
11.3.1 使用静态分析器
该分类下的相关小册推荐:
Python神经网络入门与实践
剑指Python(磨刀不误砍柴工)
Python合辑4-130个字符串操作示例
实战Python网络爬虫
Python合辑10-函数
Python合辑12-面向对象
Python合辑14-面向对象编程案例(下)
Python合辑3-字符串用法深度总结
Python合辑2-字符串常用方法
Python数据分析与挖掘实战(上)
Python自动化办公实战
Python机器学习实战