Python void 반환 유형 주석
파이썬 3.x에서는 다음과 같은 함수의 반환 유형 주석을 사용하는 것이 일반적입니다.
def foo() -> str:
return "bar"
"void"유형에 대한 올바른 주석은 무엇입니까?
3 가지 옵션을 고려 중입니다.
def foo() -> None:
- 논리적 IMO
None
가 아닙니다. 유형이 아니기 때문에
- 논리적 IMO
def foo() -> type(None):
- 내가 아는 최고의 구문을 사용하여
NoneType
,
- 내가 아는 최고의 구문을 사용하여
def foo():
- 명시적인 반환 유형 정보를 생략합니다.
옵션 2는 나에게 가장 논리적으로 보이지만 이미 1의 인스턴스를 보았습니다.
이것은 PEP 484-Type Hints 문서 에서 직접 가져온 것입니다 .
타입 힌트에서 사용되는 경우, 발현은
None
동등한 것으로 간주된다type(None)
.
그리고 보시다시피 대부분의 예제 None
는 반환 유형으로 사용 됩니다.
TLDR : void
반환 유형 주석 의 관용적 등가물 은 -> None
.
def foo() -> None:
pass
Python의 유형 힌트는 실제 유형을 엄격하게 요구하지 않습니다. 예를 들어, 주석 유형 이름의 문자열을 사용할 수 있습니다 Union[str, int]
, Union[str, 'int']
, 'Union[str, int]'
다양한 변종은 동일합니다.
마찬가지로 유형 주석은 "다음 중 " 을 의미하는None
것으로 간주 됩니다NoneType
. 반환 유형에만 사용할 수있는 것이 아니라 여기에서 가장 자주 볼 수 있습니다.
bar : None
def foo(baz: None) -> None:
return None
이것은 제네릭 유형에도 적용됩니다. 예를 들어 None
in Generator[int, None, None]
을 사용 하여 생성기가 값을 가져 오거나 반환하지 않음을 나타낼 수 있습니다 .
PEP 484가 제안에도 불구하고 None
수단을 type(None)
, 당신은 안 명시 적으로 후자의 양식을 사용합니다. 유형 힌트 사양은 않습니다 하지 어떤 형태를 포함한다 type(...)
. 이것은 기술적으로 런타임 표현식이며 지원은 전적으로 유형 검사기에 달려 있습니다. 이 mypy
프로젝트는 지원 을 type(None)
제거하고 484에서도 제거 할 것을 고려하고 있습니다.
아니면 PEP 484를 업데이트
type(None)
하여 유형으로 유효None
하고 유일한 철자 임을 제안하지 않아야 할까요? 한 가지, 바람직하게는 한 가지 분명한 방법이 있어야합니다.
"X 유형"에 해당하는 정적 항목은 Type[X]
입니다. 이것은 다음에도 유효 None
합니다.
def foo() -> Type[None]:
pass
그러나 기본적으로 동일 Type[True]
하고 유사합니다. 다른 특수한 경우 (값에서 파생 된 유형 사용)와 함께 하나의 특수 사례 (유형 대신 값 사용)를 제거합니다. 관용적 인 특별한 경우는 None
.
반환 유형을 생략 한다고해서 반환 값이 없다는 의미 는 아닙니다 . 당 PEP 484 :
확인 된 함수의 경우 인수 및 반환 유형에 대한 기본 주석은입니다
Any
.
이는 값이 동적으로 입력 된 것으로 간주되고 모든 작업을 정적으로 지원함을 의미합니다 . 그것은 실질적으로의 반대 의미입니다 void
.
참고 URL : https://stackoverflow.com/questions/36797282/python-void-return-type-annotation
'Development Tip' 카테고리의 다른 글
탐지기, 추출기 및 매처 분류 (0) | 2020.12.12 |
---|---|
cgroup과 네임 스페이스의 차이점 (0) | 2020.12.12 |
배치 파일-오류 처리 (0) | 2020.12.12 |
ini_set ( 'max_execution_time', 0) 나쁜 생각입니까? (0) | 2020.12.12 |
IP 주소를 대상으로하는 Powershell 원격 (0) | 2020.12.12 |