【发布时间】:2019-08-09 10:45:52
【问题描述】:
在类型提示系统中,Optional[T] 据说等价于Union[T, None]
这是否适用于多种类型的参数?即,
Optional[T,U] 是否突破到Union[T,U,None],或者我需要写成Optional[Union[T,U]]
【问题讨论】:
-
看起来
Optional[int, str]给出了一个 TypeError。再说一次,Union[None, int, str]占用的空间比可读性更强的空间更少,即Optional[Union[int, str]]。 -
这里最重要的一点是,如果您有一个函数,其参数可以是多种类型之一或什么都不是,您可能应该更明确地说明该类型的含义。
Username = typing.TypeVar('Username', str); UserId = typing.TypeVar('UserId', int); UserIdentifier = typing.Union[Username, UserId]; Optional[UserIdentifier]现在 意味着 某事 -
@AdamSmith 我有一个实验用例,用于对数据库条目进行突变。我想为数据类中的任何字段表示三种可能的状态,其中数据类表示数据库条目上的突变。假设字段
t的类型为T。t属于T,因此存在并且需要更新,t是None并且应该被忽略,或者t是某个标记类type(Removal)并且需要删除。然后我的字段看起来像foo: Optional[Union[str, Removal]]。有没有更简洁的方法来重用这种打字格式?不知何故说foo: Modifiable[str] -
@flakes 确定!类型和其他对象一样只是对象。
Modifiable = Optional[Union[str, Removal]]有效。 -
如果您特别希望能够指定您的可修改类型(例如
Modifiable[str]或Modifiable[int]),那么您可以像 Python 内部定义Union或Optional一样定义它。见gitlab.com/snippets/1836727
标签: python python-3.7 type-hinting