Skip to Content
《Python 概论》,第 4 版
book

《Python 概论》,第 4 版

by Alex Martelli, Anna Martelli Ravenscroft, Steve Holden, Paul McGuire
May 2025
Intermediate to advanced
738 pages
9h 28m
Chinese
O'Reilly Media, Inc.
Content preview from 《Python 概论》,第 4 版

第 5 章 类型注解 类型注解

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

在 Python 代码中标注类型信息是一个可选步骤,在大型项目或库的开发和维护过程中非常有用。静态类型检查器和 lint 工具有助于识别和定位函数参数和返回值中的数据类型不匹配。集成开发环境可以使用这些类型注释(也称为类型提示) ,以改进自动完成功能并提供弹出式文档。第三方软件包和框架可以使用类型注解来定制运行时行为,或根据方法和变量的类型注解自动生成代码。

Python 中的类型注解和检查在不断发展,并涉及许多复杂的问题。本章涵盖了类型注解的一些最常见用例;您可以在本章末尾列出的资源中找到更全面的资料。

类型注解支持因 Python 版本而异

Python 支持类型注解的特性随着版本的变化而变化,其中有一些重要的增删改。本章的其余部分将描述最新版本的 Python (3.10 及更高版本) 对类型注解的支持,并用注释说明其他版本中可能存在或不存在的特性。

历史

从根本上说,Python 是一种 动态类型语言。这使您可以通过命名和使用变量来快速开发代码,而无需声明变量。动态类型允许灵活的编码习惯用法、通用容器和多态数据处理,而不需要明确定义接口类型或类层次结构。动态类型语言的缺点是,在开发过程中,它无法帮助标记传入函数或从函数返回的不兼容类型的变量。Python 依靠开发人员维护全面的单元测试来代替某些语言在开发时使用的编译步骤来检测和报告数据类型问题,特别是(尽管远非唯一的!1) 通过在一系列测试用例中重新创建运行时环境来发现数据类型错误。

类型注解未强制执行

类型注解不会在运行时强制执行。Python 不会根据它们执行任何类型验证或数据转换;可执行的 Python 代码仍然负责正确使用变量和函数参数。然而,类型注解必须在语法上正确。包含无效类型注解的后期导入或动态导入模块会在运行的 Python 程序中引发语法错误异常,就像任何无效的 Python 语句一样。

一直以来,缺乏任何类型的类型检查常常被视为 Python 的一个缺点,一些程序员将此作为选择其他编程语言的理由。然而,社区希望 Python 能保持其运行时的类型自由,因此合乎逻辑的方法是增加对开发时由类似于 lint 的工具(下一节将进一步介绍)和集成开发环境执行的静态类型检查的支持。在解析函数签名或 docstrings 的基础上进行类型检查的尝试也有一些。Guido van Rossum 在Python 开发者邮件列表中列举了几个案例,表明类型注解可能会有所帮助;例如,在维护大型遗留代码库时。利用注释语法,开发工具可以执行静态类型检查,以突出显示与预期类型相冲突的变量和函数用法。

类型注解的第一个正式版本使用了特殊格式的注释来表示变量类型和返回代码,这在 Python 3.5 的临时 PEP484 中有所定义。2使用注释可以快速实现和尝试新的类型语法,而无需修改 Python 编译器本身。3 第三方软件包mypy使用这些注释进行静态类型检查,获得了广泛的认可。随着 Python 3.6 中PEP 526的采用,类型注解完全融入了 Python 语言本身,并在标准库中添加了支持类型的模块。

类型检查实用程序

随着 类型注解已成为 Python 的既定组成部分,类型检查实用程序和 IDE 插件也已成为 Python 生态系统的一部分。

mypy

独立的mypy工具仍然是静态类型检查的主要工具,它始终与不断发展的 Python ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

Aurélien Géron
ppk on JavaScript

ppk on JavaScript

Peter-Paul Koch

Publisher Resources

ISBN: 9798341656840