답변:
찾고 있습니다 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]
에 tranformed되어 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__
직접 액세스하는 대신 객체의 속성 을 가져 오는 데 사용하십시오 .
Optional[T]
유형은 함수형 프로그래밍 커뮤니티에서 잘 알려져 있습니다. 독자는 그것이 의미하는 것을 알 Union[T, None]
뿐만 아니라 의미있는 대답이 없거나 오류가 있거나 결과를 찾을 수 없을 때 함수가 None을 반환해야한다는 사용 패턴을 인식 할 것입니다.
Union[datetime, type(None)]
에Union[datetime, None]
따라 - PEP 484 사용None
유형 약어 내에서 항상 동등 것으로 처리됩니다type(None)
. (typing
문서는 실제로None
대부분의 경우 사용 하지만 여기에 있지는 않지만 감독입니다).