스택큐힙리스트

타입 힌트로 "nullable" 반환 타입을 어떻게 지정할까요? 본문

카테고리 없음

타입 힌트로 "nullable" 반환 타입을 어떻게 지정할까요?

스택큐힙리스트 2023. 4. 18. 02:34
반응형

만약 함수가 있다고 가정해보세요:

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 하는 대상에 대해?

답변 1

당신은 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] 는 Union[T, type(None)] 로 변환되어 여기에서 type 를 사용할 필요가 없습니다.

시각적으로는 차이가 있을 수 있지만, 프로그램적으로는 두 경우 모두 결과가 정확히 동일합니다. get_some_date.__annotations__ * 에 저장된 유형은 Union[datetime.datetime, NoneType]입니다.

>>> 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__ 속성을 가져옵니다.

답변 2

nullable 반환형을 type hints로 지정하는 방법에 대해 알아보겠습니다.

nullable 반환형은 함수가 null 값을 반환할 수 있는 경우에 사용됩니다. 이는 종종 올바르지 않은 값이 반환되는 것을 방지하고 예상치 못한 상황을 처리하는 데 도움이 됩니다. 이를 type hints로 지정하는 방법은 아래와 같습니다.

먼저, 반환 형식으로 Union[None, 반환 형식]을 사용합니다. 이를 통해 반환 값이 null 일 수 있음을 나타낼 수 있습니다. 예를 들어, 반환 값이 str 또는 null인 경우 다음과 같이 type hints를 사용할 수 있습니다.

```python

def validate_email(email: str) -> Union[None, str]:

...

```

위의 예제는 validate_email 함수가 str 또는 null 값을 반환할 수 있음을 나타냅니다.

그러나 nullable 반환형은 항상 필요하지는 않습니다. 반환 값이 항상 null 이 아니라면 Optional[반환 형식]을 사용할 수 있습니다. Optional[반환 형식]은 Union[None, 반환 형식]과 동일한 의미를 가집니다. 예를 들어, 반환 값이 str 또는 null 이 아닌 경우 다음과 같이 type hints를 사용할 수 있습니다.

```python

from typing import Optional

def get_name(id: int) -> Optional[str]:

...

```

위의 예제는 get_name 함수가 str 또는 null 값을 반환하지 않으며, 반환 값이 str 이거나 없을 수 있음을 나타냅니다.

이상적으로, nullable 반환형이 필요한 경우 Union[None, 반환 형식]을 사용하고 그렇지 않으면 Optional[반환 형식]을 사용하면 됩니다. 이를 통해 함수의 반환 값이 예측 가능하고 예상치 못한 오류를 방지할 수 있습니다.

이상으로, nullable 반환형을 type hints로 지정하는 방법에 대해 알아보았습니다. 이를 통해 보다 안전하고 정확한 코드를 작성할 수 있습니다.

반응형
Comments