# 类型注解

# 概述

函数注解是Python 3中的一个特性,它允许开发人员在函数定义中包含元数据,这些元数据可以提供有关函数参数和返回值的额外信息。

函数注解使用冒号(:)在参数名称后面,后跟注解表达式来指定元数据。注解表达式可以是任何合法的Python表达式,它通常是一个字符串或类型。

例如,下面是一个带有函数注解的Python函数定义:

def greet(name: str) -> str:
    return "Hello, " + name

在这个示例中,参数name和返回值都有注解。参数name的注解是一个字符串类型的注解,指定了函数的参数类型。返回值的注解也是一个字符串类型的注解,指定了函数的返回类型。

需要注意的是,函数注解并不会在Python中执行任何特定的操作。它们仅仅是一个提供元数据的机制,Python解释器不会强制执行注解表达式。开发人员可以使用注解来提供额外的文档和类型信息,也可以使用它们来实现一些自定义的行为。

即编译器不会对注解做任何处理,只是将其存储入函数的__annotations__​属性中。

虽然函数注解在Python中并不是必需的,但是它们可以提高代码的可读性和可维护性,尤其是在大型项目中,使用函数注解可以帮助开发人员更好地理解和使用函数。

# 提取函数签名

# signature

"""
>>> from func_sig import fun 
>>> from inspect import signature
>>> sig = signature(fun) 
>>> sig
<Signature (text, max_len: int = 180, *args, **kwargs)>
>>> str(sig) 
'(text, max_len: int = 180, *args, **kwargs)'
>>> for name,param in sig.parameters.items():
...     print(param.kind,':',name,'=',param.default)
... 
POSITIONAL_OR_KEYWORD : text = <class 'inspect._empty'>
POSITIONAL_OR_KEYWORD : max_len = 180
VAR_POSITIONAL : args = <class 'inspect._empty'>
VAR_KEYWORD : kwargs = <class 'inspect._empty'>
"""

def fun(text, max_len: int = 180, *args, **kwargs):
    pass

# __annotations__

"""
>>> fun.__annotations__
{'max_len': <class 'int'>}
"""

def fun(text, max_len: int = 180, *args, **kwargs):
    pass