[英]Optional Union in type hint
在类型提示系统中, Optional[T]
相当于Union[T, None]
这适用于多个类型参数吗? IE,
Optional[T,U]
突破到Union[T,U,None]
,或者我是否需要将其写为Optional[Union[T,U]]
您可能会将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
库中声明它没有问题。
除了从“函数式编程”的角度来看, Optional
和Union
是两个不同但众所周知且定义明确的monad 。 两个 monad 的组合( Optional[T, U, None]
)是另一个 monad,但是它的行为与Optional
不同,因此不应如此命名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.