it-source

Python void 반환 유형 주석

criticalcode 2022. 11. 29. 21:45
반응형

Python void 반환 유형 주석

python 3.x에서는 다음과 같은 함수의 반환 유형 주석을 사용하는 것이 일반적입니다.

def foo() -> str:
    return "bar"

"void" 유형에 대한 올바른 주석은 무엇입니까?

다음 3가지 옵션을 고려 중입니다.

  1. def foo() -> None:
    • 논리 IMO가 아닙니다.왜냐하면None타입이 아닙니다.
  2. def foo() -> type(None):
    • 내가 아는 최고의 구문을 사용하여NoneType,
  3. def foo():
    • 명시적 반환 유형 정보를 생략합니다.

옵션 2가 가장 논리적인 것 같습니다만, 이미 1의 예를 몇 개 본 적이 있습니다.

이것은 PEP 484 -- Type Hents 문서와 직결됩니다.

유형 힌트에서 사용되는 경우 표현식은None와 동등하다고 간주됩니다.type(None).

그리고 대부분의 예에서 볼 수 있듯이None반환 유형으로 지정됩니다.

TLDR: TLDR에 상당하는 관용어void반환 유형 주석:-> None.

def foo() -> None:
    ...

이것은, 이 기능이 없는 함수와 일치합니다.return아니면 그냥 벌거숭이일 수도 있고return까지 평가하다.None.

def void_func():  # unannotated void function
    pass

print(void_func())  # None

반환 유형을 생략해도 반환 값이 없는 것은 아닙니다.PEP 484에 따라:

선택한 함수의 경우 인수 및 반환 유형에 대한 기본 주석은 다음과 같습니다.Any.

즉, 이 값은 동적으로 입력된 것으로 간주되며 모든 동작을 스태틱하게 지원합니다.그것은 사실상 와 반대되는 의미이다.void.


Python에서의 활자 힌트는 반드시 실제 활자를 필요로 하지 않습니다.예를 들어, 주석에는 다음과 같은 유형의 문자열이 사용될 수 있습니다.Union[str, int],Union[str, 'int'],'Union[str, int]'다양한 변형이 동등합니다.

마찬가지로 유형 주석None「의」를 의미하는 것으로 간주되고 있다.NoneType". 이것은 반환 유형 주석으로 가장 자주 나타나지만 반환 유형뿐만 아니라 다른 상황에서도 사용할 수 있습니다.

bar : None

def foo(baz: None) -> None:
    return None

이는 일반 유형에도 적용됩니다.예를 들어,NoneGenerator[int, None, None]제너레이터가 값을 받지 않거나 반환하지 않음을 나타냅니다.


PEP 484는 다음과 같이 제안합니다.None수단type(None), 후자의 형식을 명시적으로 사용하지 말아 주세요.type-hint 사양에는 다음과 같은 형식이 포함되지 않습니다.type(...)이것은 엄밀히 말하면 런타임 표현이며, 그 지원은 전적으로 타입 체커에 달려 있습니다.mypy 프로젝트에서는, 다음의 서포트를 삭제할지를 검토하고 있습니다.type(None)484에서도 제거해 주세요.

아니면 PEP 484를 업데이트해서type(None)유형으로 유효하며,None철자만 맞습니까?그것을 할 수 있는 확실한 방법은 하나, 그리고 가급적 하나뿐이어야 합니다.

--- JukkaL, 2018년 5월 18일

언급URL : https://stackoverflow.com/questions/36797282/python-void-return-type-annotation

반응형