2.17. 타입 힌트

Python에서는 함수 매개변수와 반환값에 타입 정보로 주석을 달 수 있습니다. 이 주석은 실행 시점에 무시됩니다. 아무것도 그것을 검사하지 않고, 그것을 기반으로 변환하지도 않습니다. 하지만 읽는 사람과 IDE를 위한 문서 역할을 합니다.

2.17.1. 주석 구문

매개변수 주석은 콜론 뒤에 옵니다. 반환 타입은 -> 뒤, 본문의 콜론 앞에 옵니다:

def greet(name: str) -> None:
    print("hello,", name)

def add(a: int, b: int) -> int:
    return a + b

def average(values: list) -> float:
    return sum(values) / len(values)

힌트는 무엇이 전달되어야 하는지와 무엇이 반환될 것인지를 기술합니다. add("hi", "there")를 호출해도 예외가 발생하지 않습니다. Python은 어쨌든 본문을 실행합니다. 힌트는 계약이지 검사가 아닙니다.

매개변수는 기본값과 주석을 모두 가질 수 있습니다:

def greet(name: str, greeting: str = "hello") -> None:
    print(greeting, name)

CPython은 typing 모듈을 통해 더 풍부한 표기법(Optional, Union, 제네릭)을 갖지만, 이는 MicroPython에서는 무겁고 일상적인 카메라 코드에는 거의 필요하지 않습니다.

2.17.2. 실행 시점의 MicroPython

MicroPython은 주석을 파싱한 다음 무시합니다. 카메라에는 임포트할 typing 모듈이 없습니다. Optional[int] 또는 list[int]를 사용하려고 하면 펌웨어 빌드에 따라 임포트에 실패하거나 조용히 일반적인 속성 접근처럼 동작합니다.

주석에는 일반 타입 이름(int, float, str, bool, bytes, list, tuple, dict)을 사용하세요. 이들은 실행 시점에 아무 비용도 들지 않으며 의도를 명확하게 전달합니다.

2.17.3. IDE가 이를 사용하는 방법

IDE는 주석을 읽어 툴팁, 자동 완성, 인라인 힌트를 구동합니다. -> int로 주석이 달린 함수는 커서가 호출 위에 올라가면 반환 타입으로 int를 표시합니다. : str로 주석이 달린 매개변수는 함수 본문 내부에서 그 인수에 대해 문자열 메서드를 자동 완성합니다.

이것이 주석을 무시하는 런타임에서 주석을 작성하는 실질적인 이득입니다. 스크립트가 카메라에서 실행될 때 아무 비용도 들지 않으면서 에디터로부터 더 나은 지원을 받습니다.

2.17.4. 변수 주석

일반 할당에 대한 주석도 같은 방식으로 동작합니다:

threshold: float = 0.5
name: str = "OpenMV"

이들 역시 실행 시점에 무시됩니다. 주된 용도는 오른쪽 값이 의도된 타입을 분명하게 드러내지 않을 때 그것을 분명하게 만드는 것입니다. 일반적으로 초깃값이 나중에 교체될 자리표시자일 때입니다.