类型提示中的可选Union

时间:2019-03-19 00:28:59

标签: python python-3.7 type-hinting

在类型提示系统中,Optional[T]等效于Union[T, None]

这对多个类型参数有用吗?即

Optional[T,U]分解成Union[T,U,None]还是我需要写成Optional[Union[T,U]]

1 个答案:

答案 0 :(得分:2)

您可能认为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]库中声明它也没有麻烦,但就mypy而言,typing是不可能的。

从“函数式编程”的角度来看,OptionalUnion是两个截然不同但众所周知且定义明确的monads。两个单子(Optional[T, U, None])的组合是另一个单子,但是其行为与Optional不同,因此不应如此命名。