向函数添加类型
让我们举一个函数的例子,它接收两个参数并返回一个表示其总和的值:
def two_sum(a, b):
return a + b
通过查看此代码,人们无法安全且毫无疑问地指出函数 two_sum
的参数类型。它在提供 int
值时都有效:
print(two_sum(2, 1)) # result: 3
和字符串:
print(two_sum("a", "b")) # result: "ab"
和其他值,如 list
s,tuple
s 等。
由于 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
时的返回值应该是 int
类型。同样,我们可以为 str
,float
,list
,set
等定义适当的值。
虽然类型提示主要由类型检查器和 IDE 使用,但有时你可能需要检索它们。这可以使用 __annotations__
特殊属性来完成:
two_sum.__annotations__
# {'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}