如何使用类型提示指定“可空”返回类型
- 2025-03-26 09:09:00
- admin 原创
- 18
问题描述:
假设我有一个函数:
def get_some_date(some_argument: int=None) -> %datetime_or_None%:
if some_argument is not None and some_argument == 1:
return datetime.utcnow()
else:
return None
我如何指定可以返回的东西的返回类型None
?
解决方案 1:
您正在寻找Optional
。
由于您的返回类型可以是datetime
(从 返回datetime.utcnow()
)或者None
您应该使用Optional[datetime]
:
from typing import Optional
def get_some_date(some_argument: int=None) -> Optional[datetime]:
# as defined
根据打字文档,Optional
是以下简写:
Optional[X]
相当于Union[X, None]
。
其中表示或Union[X, Y]
类型的值。X
`Y`
如果您担心别人可能会偶然发现Optional
而无法理解其含义,因此想要明确表达,则可以使用Union
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
但我怀疑这不是一个好主意,Optional
这是一个指示性的名称,它确实节省了几次击键。
正如@Michael0x2a 在评论中指出的那样,Union[T, None]
已经转变为,所以这里Union[T, type(None)]
不需要使用。type
从视觉上看,这些可能有所不同,但在编程上,在这两种情况下,结果完全相同;将是存储在*Union[datetime.datetime, NoneType]
中的类型:get_some_date.__annotations__
>>> from typing import get_type_hints
>>> print(get_type_hints(get_some_date))
{'return': typing.Union[datetime.datetime, NoneType],
'some_argument': typing.Union[int, NoneType]}
*用于typing.get_type_hints
获取对象的__annotations__
属性而不是直接访问它。
解决方案 2:
您可以只使用垂直线datetime | None
(类似于或运算符):
def get_some_date() -> datetime | None:
# rest of code
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD