在类型提示系统中,Optional[T]据说等价于Union[T, None]这适用于多个类型参数吗?IE,确实Optional[T,U]爆发了Union[T,U,None],或者我需要把它写成Optional[Union[T,U]]
1 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
您可能会将typing库视为有关如何声明某些类型的规范。如果该规范中未定义某些内容,那么最好将其假设为未定义的行为。
然而,在 python 和类型的特殊情况下,我们有一种引用静态类型检查器,它是mypy。因此,为了获得您问题的答案,或者只是以编程方式检查类型,我们可能会使用它并查看它是否显示任何警告。
下面是一个例子:
$ cat check_optional.py
import typing
def fn(x: typing.Optional[int, str]):
pass
$ mypy check_optional.py
check_optional.py:3: error: Optional[...] must have exactly one type argument
所以不,Optional[T, U]即使在typing库中声明它没有问题,就 mypy 而言也是不可能的。
除了从“函数式编程”的角度来看,Optional和Union都是两个不同但众所周知且定义明确的monad。两个 monad ( Optional[T, U, None]) 的组合是另一个 monad,但是它的行为与此不同Optional,因此不应如此命名。
添加回答
举报
0/150
提交
取消