Python 如何指定;“可为空”;带有类型提示的返回类型
假设我有一个函数:Python 如何指定;“可为空”;带有类型提示的返回类型,python,python-3.x,python-3.5,type-hinting,Python,Python 3.x,Python 3.5,Type Hinting,假设我有一个函数: 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?的内容指定返回类型 由于返回类型可以是datetime(从datet
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
?的内容指定返回类型
由于返回类型可以是datetime
(从datetime.utcnow()
返回)或None
,因此应使用可选的[datetime]
:
from typing import Optional
def get_some_date(some_argument: int=None) -> Optional[datetime]:
# as defined
从有关键入的文档中,可选
是以下内容的简写:
Optional[X]
相当于Union[X,None]
其中,Union[X,Y]
表示类型为X
或Y
的值
如果由于担心其他人可能会无意中发现
可选
而没有意识到它的含义,您希望明确,那么您可以始终使用联合
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
但我怀疑这是一个好主意,可选
是一个指示性名称,它确实节省了几次击键
正如@Michael0x2aUnion[T,None]
在注释中指出的,它被转换为Union[T,type(None)]
,因此这里不需要使用type
视觉上这些可能不同,但在程序上,在这两种情况下,结果完全相同Union[datetime.datetime,NoneType]
将是存储在get\u some\u date.\u注释中的类型。
*:
*使用
键入。获取\u type\u提示
以获取对象的\u注释
属性,而不是直接访问它。您可以将Union[datetime,type(None)]
简化为Union[datetime,None]
--根据,在类型注释中使用None
始终被视为等同于type(None)
。(在大多数情况下,键入
文档实际上使用了无
,但在这里没有,这是一个疏忽)。@Michael0x2a不知道,很有趣。补充道:)我刚开始提交来修复这个问题,所以希望文档在不久的将来会更加一致!Optional[T]
类型在函数式编程社区是众所周知的。读者不仅会知道它的意思是Union[T,None]
,而且还会认识到当没有有意义的答案、出现错误或结果未找到时函数将返回None的使用模式。在Python 3.10datetime中,可以使用None
。在键入包中应用了错误的命名。它可以是Nullable[X]
作为Union[None,X]
的等价物。因此,无需解释Optional
不适用于可选参数
>>> 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]}