Python 函数注释
来源:互联网 发布:淘宝网店收费 编辑:程序博客网 时间:2024/06/05 19:47
简述
在 Python 3.x 中,增加了一个新特性 - 函数注释(Function Annotations),顾名思义,可做为函数额外的注释来用。
函数注释是一个可选功能,它允许在函数参数和返回值中添加任意的元数据。无论是 Python 本身还是标准库,都使用了函数注释,第三方项目可以很方便的使用函数注释来进行文档编写、类型检查、或者是其他用途。
- 简述
- 为何要引入函数注释
- 函数注释语法
- 单个注释
- 访问函数注释
- 多个注释
- 动态注释
版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820
为何要引入函数注释?
在 Python 2.x 中,由于缺少对函数参数和返回值进行注释的标准方法,所以很多工具和库为了填补这一空白,使用了不同的方式:
- 自定义 decorator
- 自定义 docstring 格式
- 向函数对象添加自定义属性
显然,由于机制和语法的广泛差异,这会在一定程度上引起混乱。
为了解决这个问题,Python 3.x 引入了函数注释(详见:PEP-3107),旨在提供了一种单一的、标准的方法,来将元数据与函数参数和返回值相关联。
注意: 注释是完全可选的。
函数注释语法
函数注释包括:
- 参数注释:以冒号(
:
)标记 - 返回值注释:以
->
标记
语法结构大体如下:
def foo(a: expression, b: expression = 5) -> expression: ...
在伪语法中,参数看起来像:identifier [: expression] [= expression]
。也就是说,参数注释总在其默认值之前。当函数定义被执行时,所有的注释表达式都被求值,就像默认值一样。
参数列表后面可以跟一个 ->
和一个 Python 表达式。与参数的注释一样,在执行函数定义时,将对该表达式求值。
单个注释
函数注释可以包含类型、帮助字符串,以及其他更多信息。
来看一个例子,有一个函数 sum(),接受三个参数 a、b、c,并返回它们的和。
>>> def sum(a, b: int, c: 'The default value is 5' = 5) -> float:... return a + b + c... >>>
其中,第一个参数 a 没有注释,第二个参数 b 带有类型为 int 的注释,第三个参数 c 带有一个帮助字符串注释并且拥有默认值,返回值用类型 float 来注释。
调用 sum() 两次,一次使用 int,一次使用字符串:
>>> sum(1, 2)8>>> >>> sum('Hello', ', ', 'Python!')'Hello, Python!'
显然,注释对函数的执行没有任何影响。在这两种情况下,sum() 都做了正确的事情,只不过注释被忽略了而已。
访问函数注释
函数对象有一个名为 __annotations__
的属性,它是一个映射(dict),用于将每个参数名(key)映射到其相关的注释(value)。
注意: 映射中有一个特殊的 key,叫做“return”,仅当为函数的返回值提供注释时,才会显示该 key。
回到上述示例,并检查它的注释:
>>> type(sum.__annotations__)<class 'dict'>>>>>>> sum.__annotations__{'c': 'The default value is 5', 'return': <class 'float'>, 'b': <class 'int'>}
之所以选择 “return”,是因为它不会与任何参数名冲突。“return”是 Python 中的一个关键字,任何使用“return”作为参数名的尝试都会引发 SyntaxError。
多个注释
倘若,函数注释中要同时包含类型和帮助字符串,怎么办?很容易,可以使用具有两个 key(例如:type 和 help)的 dict:
>>> def div(a: dict(type=float, help='the dividend'),... b: dict(type=float, help='the divisor (must be different than 0)')... ) -> dict(type=float, help='the result of dividing a by b'):... """Divide a by b"""... return a / b... >>>
调用 div():
>>> div.__annotations__{'a': {'type': <class 'float'>, 'help': 'the dividend'}, 'return': {'type': <class 'float'>, 'help': 'the result of dividing a by b'}, 'b': {'type': <class 'float'>, 'help': 'the divisor (must be different than 0)'}}>>>>>> div(5, 2)2.5
注意: 如果要包含更多的注释(示例中是 2 个),可以在 dict 中包含更多的 key:value
对。
动态注释
__annotations__
是函数的一个属性,类型为 dict。由于 dict 是可变的,这意味着,可以在程序运行时动态地修改注释。
假设,想知道是否使用了参数的默认值,或者想把所有的返回值都加起来。
>>> def sum(a, b) -> 0:... result = a + b... sum.__annotations__['return'] += result... return result... >>> sum.__annotations__['return']0>>> >>> sum(1, 2)3>>> sum.__annotations__['return']3>>> >>> sum(3, 4)7>>> sum.__annotations__['return']10
PS: 动态注释可以在函数内部完成,也可以由装饰器完成。
- Python 函数注释
- 使用DocStrings为python函数添加注释
- Python注释
- python 注释
- Python注释
- python注释
- Python注释
- python注释
- python注释
- python 注释
- Python 注释
- Python 注释
- Python注释
- Python注释
- python注释
- python-注释
- python 注释
- Python---注释
- 不同字符编码转换(UTF8 UNICODE ANSI)
- 基于HTML5的五子棋游戏
- mysql多个TimeStamp设置
- F1V3.0-图形-绘图框架主要功能简介
- soa与ESB
- Python 函数注释
- 循环for与foreach的对比
- AAC ADTS
- spring junit测试填坑
- 排序算法总结
- 什么是编程语言?
- 数学建模 ————统计问题之预测(一)
- 如何在HBuilder中创建一个web项目?
- vc中format用法以及c++中Format用法