在类型暗示系统中,据说Optional[T]
相当于Union[T, None]
这适用于多种类型的参数吗?即
Optional[T,U]
突然出现在Union[T,U,None]
,还是我需要把它写成Optional[Union[T,U]]
您可以将typing
库视为如何声明某些类型的规范。如果在该规范中没有定义某些内容,则总是更好地将其视为未定义的行为。
但是在python和type的特定情况下,我们有一个类型的引用静态类型检查器,它是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]
在mypy方面是不可能的,即使在typing
库中声明它没有问题。
除了“功能编程”的观点,Optional
和Union
都是两个截然不同但知名度很高的monads。两个monad(Optional[T, U, None]
)的组合是另一个monad,然而它的行为与Optional
不同,因此不应该这样命名。