함수가 있다고 가정합니다.
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
'파이썬' 카테고리의 다른 글
| 파이썬 Python unittest를 사용하여 파일을 작성하는 함수의 단위 테스트를 수행하는 방법 (0) | 2020.10.30 |
|---|---|
| 파이썬 UnicodeEncodeError : 'latin-1'코덱은 문자를 인코딩 할 수 없습니다. (0) | 2020.10.30 |
| 파이썬 Python의 바이너리 파일에서 데이터 읽기 및 해석 (0) | 2020.10.30 |
| 파이썬 Pandas에서 null 값을 삭제하는 방법은 무엇입니까? (0) | 2020.10.30 |
| 파이썬 아나콘다의 기본 파이썬 경로를 설정하는 방법은 무엇입니까? (0) | 2020.10.30 |
댓글