问题?
对函数twoSum进行定义时,出现了“List[int]、int、->List[int]”类似于“注释”的语法,如下代码。
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]:
是什么?
由于 Python 的 2.x 系列缺乏注释函数参数和返回值的标准方法,从Python 3.0后,引入了给函数添加任意元数据注释的语法。
那么这些函数注释(Function annotations)是什么呢?参考官方文档:PEP 3107 – Function Annotations
def compile(source: "something compilable", filename: "where the compilable thing comes from", mode: "is this a single statement or a suite?"): ...
怎么用?
1. 参数
def foo(a: expression, b: expression = 5):
2. 返回值
def sum() -> expression:
特点?
1.__annotations__
相较于日常的注释,我们可以用__annotations__
提取出相关的注释值。仅当为函数的返回值提供注释时,此键才存在。
def kinetic_energy(m:'in KG', v:'in M/S')->'Joules': return 1/2*m*v**2 >>> kinetic_energy.__annotations__ {'return': 'Joules', 'v': 'in M/S', 'm': 'in KG'}
(也没有想到有很好的应用场景)
2. typing 第三方类型检查工具, python 3.5之后版本可以使用,包括List, Any
, Union
, Callable
, TypeVar
, and Generic
等类型
参考:typing
— Support for type hints 和 PEP 483 – The Theory of Type Hints
from typing import List # type support for annotations List class Solution(object): def twoSum(self, nums: List[int], target: int) -> List[int]: """ :type nums: List[int] :type target: int :rtype: List[int] """
但是,进行测试如下。只是为了说明参数和返回值的数据类型,给阅读提供参考,实际上程序并不检查是否是相符。
def fun(x: int) -> str: return [x] >>> fun('asd') ['asd']
参考文章: