# 类型注解
# 概述
函数注解是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