source

유형 힌트를 사용하여 "nullable" 반환 유형을 지정하는 방법

goodcode 2022. 12. 25. 11:16
반응형

유형 힌트를 사용하여 "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

반응형