类型提示中的可选联盟

问题描述 投票:2回答:1

在类型暗示系统中,据说Optional[T]相当于Union[T, None]

这适用于多种类型的参数吗?即

Optional[T,U]突然出现在Union[T,U,None],还是我需要把它写成Optional[Union[T,U]]

python python-3.7 type-hinting
1个回答
2
投票

您可以将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库中声明它没有问题。

除了“功能编程”的观点,OptionalUnion都是两个截然不同但知名度很高的monads。两个monad(Optional[T, U, None])的组合是另一个monad,然而它的行为与Optional不同,因此不应该这样命名。

© www.soinside.com 2019 - 2024. All rights reserved.