
函数中的类型提示
|
217
第一次出现在签名中时,类型参数
T
可以是任何类型。第二次出现时,与第一次的类型
相同。
因此,任何可迭代对象都与
Iterable[T]
相容,包括
collections.Counter
无法处理的不可
哈希的可迭代类型。需要限制可以赋予
T
的类型。下面两节介绍了两种方式。
1.
受限的
TypeVar
TypeVar
还接受一些位置参数,以对类型参数施加限制。可以改进
mode
函数的签名,以接
受指定的几种数值类型,如下所示。
from collections.abc import Iterable
from decimal import Decimal
from fractions import Fraction
from typing import TypeVar
NumberT = TypeVar('NumberT', float, Decimal, Fraction)
def mode(data: Iterable[NumberT]) -> NumberT:
这样好多了。这也是
2020
年
5
月
25
日
typeshed
项目中存根文件
statistics.pyi
为
mode
函数
提供的签名。
然而,
statistics.mode
文档中还有以下示例。
>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'
你的第一反应可能是在
NumberT
定义中添加
str
。
NumberT = TypeVar('NumberT', ...