유형 힌트를 사용하여 "nullable" 반환 유형을 지정하는 방법
다음과 같은 기능이 있다고 가정합니다.
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
를 사용해야 합니다.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]
type의 값을 의미합니다.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__
Atribute에 직접 액세스하는 대신 Atribute를 사용합니다.
세로선만 쓰면 돼datetime | None
(OR 연산자와 유사):
def get_some_date(some_argument: int=None) -> datetime | None:
# rest of code
언급URL : https://stackoverflow.com/questions/39429526/how-to-specify-nullable-return-type-with-type-hints
'source' 카테고리의 다른 글
jQuery를 사용하여 입력을 비활성화/활성화하시겠습니까? (0) | 2022.12.25 |
---|---|
MySql, 날짜 및 시간 열을 타임스탬프로 결합 (0) | 2022.12.25 |
Java 생성자에서 int 배열 초기화 (0) | 2022.12.25 |
MySQL OR과 IN의 퍼포먼스 비교 (0) | 2022.12.25 |
Eclipse는 왜 @Override on interface methods에 대해 불평하는가? (0) | 2022.12.25 |