Python向函数添加类型

示例

让我们以一个函数的示例为例,该函数接收两个参数并返回一个表示它们之和的值:

def two_sum(a, b):
    return a + b

通过查看此代码,您无法安全无疑地指示function参数的类型two_sum。当提供int值时,它都可以工作:

print(two_sum(2, 1))  # 结果:3

和字符串:

print(two_sum("a", "b"))  # result: "ab"

以及其他值,例如lists,tuples等。

由于python类型的动态特性,其中许多类型适用于给定操作,因此任何类型检查器都无法合理地断言是否应允许对此函数的调用。

为了帮助我们的类型检查器,我们现在可以在功能定义中为其提供类型提示,以指示允许的类型。

为了表明我们只希望允许int类型,我们可以将函数定义更改为:

def two_sum(a: int, b: int):
    return a + b

注释后跟参数名称,并用:字符分隔。

同样,为了表明只str允许类型,我们将更改函数以指定它:

def two_sum(a: str, b: str): 
    return a + b

除了指定参数的类型外,还可以指示函数调用的返回值。这是通过->在参数列表的右括号后在:函数声明末尾之前在字符后添加字符和类型来实现的:

def two_sum(a: int, b: int) -> int: 
    return a + b

现在我们已经指出,调用时的返回值two_sum应为type int。同样,我们可以定义适当的值str,float,list,set等。

尽管类型提示通常由类型检查器和IDE使用,但是有时您可能需要检索它们。这可以使用__annotations__特殊属性来完成:

two_sum.__annotations__
# {'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}