python - traducir - traductor de frases en ingles a español gratis
Cómo especificar el tipo de retorno "anulable" con sugerencias de tipo (1)
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 especifico el tipo de retorno para algo que puede ser
None
?
Estás buscando
Optional
.
Como su tipo de devolución puede ser
datetime
(tal 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,
Optional
es la abreviatura de:
Optional[X]
es equivalente aUnion[X, None]
.
donde
Union[X, Y]
significa un valor de tipo
X
o
Y
Si desea ser explícito debido a preocupaciones de que otros puedan tropezar con
Optional
y no darse cuenta de su significado, siempre puede usar
Union
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
Pero dudo que sea una buena idea,
Optional
es un nombre indicativo y ahorra un par de pulsaciones de teclas.
Como se señaló en los comentarios de @ Michael0x2a
Union[T, None]
se transforma a
Union[T, type(None)]
por lo que no es necesario utilizar el
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]}
*
Use
typing.get_type_hints
para tomar el atributo
__annotations__
los objetos en lugar de acceder a él directamente.