news 2026/6/14 20:57:08

Python 高手编程系列三千四百二十二:函数注解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 高手编程系列三千四百二十二:函数注解

函数注解是 Python 3 最独特的功能之一。官方文档是这么说的:函数注解是关于用户
自定义函数使用的类型的完全可选的元信息,但事实上,它并不局限于类型提示,而且在
Python 及其标准库中也没有单个功能可以利用这种注解。这就是这个功能独特的原因:它
没有任何语法上的意义。可以为函数定义注解,并在运行时获取这些注解,但仅此而已。
如何使用注解留给开发人员去思考。
1.一般语法
对 Python 官方文档中的示例稍作修改,就可以很好展示如何定义并获取函数注解:

def f(ham: str, eggs: str = ‘eggs’) -> str:
… pass

print(f. __annotations __)
{‘return’: <class ‘str’>, ‘eggs’: <class ‘str’>, ‘ham’: <class ‘str’>}
如上所述,参数注解的定义为冒号后计算注解值的表达式。返回值注解的定义为表示
def 语句结尾的冒号与参数列表之后的->之间的表达式。
定义好之后,注解可以通过函数对象的__annotations__属性获取,它是一个字典,
在应用运行期间可以获取。
任何表达式都可以用作注解,其位置靠近默认参数,这样可以创建一些迷惑人的函数
定义,如下所示:
def square(number: 0<=3 and 1=0) -> (
… +9000): return number**2
square(10)
100
不过,注解的这种用法只会让人糊涂,没有任何其他作用。即使不用注解,编写出难
以阅读和理解的代码也是相对容易的。
可能的用法
虽然注解有很大的潜力,但并没有被广泛使用。一篇介绍Python 3 新增功能的文章(参见
https://docs.python.org/3/whatsnew/3.0.html)称,此功能的目的是“鼓励通过元类、装饰器或框架
进行试验”。另一方面,作为提议函数注解的官方文档,PEP 3107 列出以下可能的使用场景:
• 提供类型信息。
○ 类型检查。
○ 让 IDE 显示函数接受和返回的类型。
○ 函数重载/通用函数。
○ 与其他语言之间的桥梁。
○ 适配。
○ 谓词逻辑函数。
○ 数据库查询映射。
○ RPC 参数编组。
• 其他信息。
○ 参数和返回值的文档。
虽然函数注解存在的时间和 Python 3 一样长,但仍然很难找到任一常见且积极维护的
包,将函数注解用作类型检查之外的功能。所以函数注解仍主要用于试验和玩耍,这也是
Python 3 最初发布时包含该功能的最初目的。
小结
本章介绍了不直接与 Python 类和面向对象编程相关的多个最佳语法实践。本章第一部
分重点介绍了与 Python 序列和集合相关的语法特性,也讨论了字符串和字节相关的序列。
本章其余部分介绍了两组独立的语法元素:一组是初学者相对难以理解的(例如迭代器、
生成器和装饰器),另一组是鲜为人知的(for…else 子句和函数注解)。
语法最佳实践 — 类级别以上
本章我们将重点介绍类的语法最佳实践。这里并不打算涉及设计模式,因为这部分内
容将在第 14 章介绍。本章概述了用于操作和改进类代码的 Python 高级语法。
在 Python 2 的历史中,对象模型已经发生了很大变化。在很长一段时间里,同一种语
言的面向对象编程范式存在两种实现方式。这两种模型被简称为旧式(old-style)类和新式
(new-style)类。Python 3 终结了这一分歧,其开发者只能使用被称为新式类的模型。不管
怎样,知道两种模型在 Python 2 中的工作原理仍是很重要的,因为这有助于你移植旧代码
和编写向后兼容的应用。了解对象模型如何变化,也有助于你理解它现在为何如此设计。
这也是为什么本章包含关于 Python 2 旧特性的大量内容,尽管本书针对的是最新版的
Python 3。
本章将讨论下列主题。
• 子类化内置类型。
• 访问超类中的方法。
• 使用 property 和槽(slot)。
• 元编程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 20:54:05

如何轻松绕过Windows 11限制:Mac用户的终极启动盘制作方案

如何轻松绕过Windows 11限制&#xff1a;Mac用户的终极启动盘制作方案 【免费下载链接】windiskwriter &#x1f5a5; Windows Bootable USB creator for macOS. &#x1f6e0; Patches Windows 11 to bypass TPM and Secure Boot requirements. &#x1f47e; UEFI & Lega…

作者头像 李华
网站建设 2026/6/14 20:54:04

MySigMail:三分钟打造专业级邮件签名的终极免费解决方案

MySigMail&#xff1a;三分钟打造专业级邮件签名的终极免费解决方案 【免费下载链接】mysigmail A free and open-source email signature generator for Gmail, Outlook, Apple Mail, etc. 项目地址: https://gitcode.com/gh_mirrors/my/mysigmail 在数字商务时代&…

作者头像 李华
网站建设 2026/6/14 20:50:56

NSK精密滚珠丝杠W1605FA规格详述

您好&#xff01;您本次查询的 W1605FA-3P-C5Z16 属于 NSK 推出的紧凑型 FA 系列&#xff08;Compact FA Series&#xff09;高速精密滚珠丝杠。 它与我们在之前对话中讨论过的 W1604FA-5P-C5Z16&#xff08;400 mm 行程&#xff09;、W1605FA-1P-C5Z16&#xff08;450 mm 行程…

作者头像 李华
网站建设 2026/6/14 20:49:56

多模态模型融合推理:从视觉编码器到语言模型的跨模态对齐实践

多模态模型融合推理&#xff1a;从视觉编码器到语言模型的跨模态对齐实践 一、单一模态的感知盲区&#xff1a;为什么纯文本模型无法理解世界 纯文本大模型只能处理符号化的语言信息&#xff0c;无法直接感知图像、音频和视频。当用户上传一张数据截图并提问"这个季度的增…

作者头像 李华
网站建设 2026/6/14 20:48:00

大湾区严谨型EMBA理性测评:按需选型避坑指南

一、引言&#xff1a;大湾区EMBA选型核心痛点2025-2026年大湾区免联考EMBA报考人数同比上涨22%&#xff0c;生源以科创企业创始人、跨境金融高管、制造业决策者为主&#xff0c;占比超65%。当前行业存在两大普遍选型难点&#xff1a;一是市场项目分层混乱&#xff0c;内地联考、…

作者头像 李华