返回介绍

Python 3.0 中的函数注解

发布于 2024-01-29 22:24:16 字数 1691 浏览 0 评论 0 收藏 0

在Python 3.0中(但不包括Python 2.6),也可以给函数对象附加注解信息——与函数的参数和结果相关的任意的用户定义的数据。Python为声明注解提供了特殊的语法,但是,它自身不做任何事情;注解完全是可选的,并且,出现的时候只是直接附加到函数对象的__annotations__属性以供其他用户使用。

我们在上一章中介绍了Python 3.0的keyword-only参数,注解则进一步使函数头部语法通用化。考虑如下的不带注解的函数,它编写为带有3个参数并且返回一个结果:

从语法上讲,函数注解编写在def头部行,就像与参数和返回值相关的任意表达式一样。对于参数,它们出现在紧随参数名之后的冒号之后;对于返回值,它们编写于紧跟在参数列表之后的一个->之后。例如,这段代码,注解了前面函数的3个参数及其返回值:

调用一个注解过的函数,像以前一样,不过,当注解出现的时候,Python将它们收集到字典中并且将它们附加给函数对象自身。参数名变成键,如果编写了返回值注解的话,它存储在键"return"下,而注解键的值则赋给了注解表达式的结果:

由于注解只是附加到一个Python对象的Python对象,注解可以直接处理。下面的例子只是注解了3个参数中的两个,并且通用地遍历附加的注解:

这里有两点值得注意。首先,如果编写了注解的话,仍然可以对参数使用默认值——注解(及其:字符)出现在默认值(及其=字符)之前。例如,下面的a:'spam'=4意味着参数a的默认值是4,并且用字符串'spam'注解它:

还要注意前面例子中的空格都是可选的——你可以在函数头部的各部分之间使用空格,也可以不用,但省略它们对某些读者来说可能会提高代码的可读性:

注解是Python 3.0中的新功能,并且其一些潜在的用途还没有介绍。很容易想象,注释可以用作参数类型或值的特定限制,并且较大的API可能使用这一功能作为注册函数接口信息的方式。实际上,我们将会在第38章中看到一个潜在的应用,那里,我们将看到注解作为函数装饰器参数(这是一个更为通用的概念,其中,信息编写于函数头部之外,并且由此不仅限于一种用途)的一种替代方法。和Python自身一样,注解是一种功能随着你的想象来变化的工具。

最后,注意,注解只在def语句中有效,在lambda表达式中无效,因为lambda的语法已经限制了它所定义的函数工具。这把我们带入到下一个主题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文