본문 바로가기
파이썬

파이썬 유형 힌트로 "nullable"반환 유형을 지정하는 방법

by º기록 2020. 10. 30.
반응형

함수가 있다고 가정합니다.

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] 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)] 으로 변환되므로 <를 사용할 필요가 없습니다. 여기에 code> 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 __ 속성을 ​​직접 액세스하는 대신 가져옵니다.

 

참조 페이지 https://stackoverflow.com/questions/39429526

 

 

반응형

댓글