Cómo especificar el tipo de retorno "nullable" con sugerencias de tipo
Supongamos que tengo una función:
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
¿Cómo puedo especificar el tipo de retorno para algo que puede ser None
?
1 answers
Usted está buscando Optional
.
Dado que su tipo de devolución puede ser datetime
(como se devuelve desde datetime.utcnow()
) o None
debe usar Optional[datetime]
:
from typing import Optional
def get_some_date(some_argument: int=None) -> Optional[datetime]:
# as defined
De la documentación sobre mecanografía, {[3] } es la abreviatura de:
Optional[X]
es equivalente aUnion[X, None]
.
Donde Union[X, Y]
significa un valor de tipo X
o Y
.
Si quieres ser explícito debido a la preocupación de que otros puedan tropezar con Optional
y no darse cuenta de su significado, siempre podría usar Union
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
Pero dudo que esta sea una buena idea, Optional
es un nombre indicativo y guarda un par de pulsaciones de teclas.
Como se señala en los comentarios de @ Michael0x2a Union[T, None]
se transforma a Union[T, type(None)]
así que no hay necesidad de usar type
aquí.
Visualmente estos pueden diferir pero programáticamente, en ambos casos, el resultado es exactamente el mismo; Union[datetime.datetime, NoneType]
será el tipo almacenado en 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]}
*Uso typing.get_type_hints
para obtener el atributo objects' __annotations__
en lugar de acceder a él directamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-14 08:03:37