|
|
51CTO旗下网站
|
|
移动端

2.3.2 函数注解

《Python高级编程(第2版)》第2章语法最佳实践——类级别以下,本章将介绍现在这门语言的语法中最重要的元素,以及它们的使用技巧。本节为大家介绍函数注解。

作者:张亮/阿信 译来源:人民邮电出版社|2018-01-29 18:38

2.3.2 函数注解

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

1.一般语法

对Python官方文档中的示例稍作修改,就可以很好展示如何定义并获取函数注解:

  1. >>> def f(ham: str, eggs: str = 'eggs') -> str:  
  2. ...     pass  
  3. ...  
  4. >>> print(f.__annotations__)  
  5. {'return': < class 'str' >, 'eggs': < class 'str' >, 'ham': < class 'str' >

如上所述,参数注解的定义为冒号后计算注解值的表达式。返回值注解的定义为表示def语句结尾的冒号与参数列表之后的-&gt;之间的表达式。

定义好之后,注解可以通过函数对象的__ annotations __属性获取,它是一个字典,在应用运行期间可以获取。

任何表达式都可以用作注解,其位置靠近默认参数,这样可以创建一些迷惑人的函数定义,如下所示:

  1. >>> def square(number: 0< =3 and 1=0) - > (\  
  2. ...     +9000): return number**2  
  3. >>> square(10)  
  4. 100 

不过,注解的这种用法只会让人糊涂,没有任何其他作用。即使不用注解,编写出难以阅读和理解的代码也是相对容易的。

2.可能的用法

虽然注解有很大的潜力,但并没有被广泛使用。一篇介绍Python 3新增功能的文章(参见https://docs.python.org/3/whatsnew/3.0.html)称,此功能的目的是“鼓励通过元类、装饰器或框架进行试验”。另一方面,作为提议函数注解的官方文档,PEP 3107列出以下可能的使用场景:

提供类型信息。

类型检查。

让IDE显示函数接受和返回的类型。

函数重载/通用函数。

与其他语言之间的桥梁。

适配。

谓词逻辑函数。

数据库查询映射。

RPC参数编组。

其他信息。

参数和返回值的文档。

虽然函数注解存在的时间和Python 3一样长,但仍然很难找到任一常见且积极维护的包,将函数注解用作类型检查之外的功能。所以函数注解仍主要用于试验和玩耍,这也是Python 3最初发布时包含该功能的最初目的。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Windows编程启示录

主要内容: ● 如何设计像自动售货机那样有效的用户界面。 ● 深入理解窗口和对话框的管理机制。 ● 为什么性能优化与我们在直觉上的理...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊