파이썬에서 타입 힌트(타입 어노테이션)를 하려다 보면 꼭 알아야 할 모듈이 있습니다. 바로 typing 모듈입니다. 물론 파이썬 3.10 이상부터는 typing 모듈이 없어도 타입 힌트를 주는데 별 어려움이 없어지긴 했지만, 예전 버전으로 작성된 코드를 이해하기 위해서는, 또 예전 버전의 파이썬에서 타입 힌트를 주기 위해서는 typing 모듈을 꼭 알고 넘어가야 합니다.
List, Dict, Tuple, Set
우선 typing 모듈의 중요한 클래스들에는 List, Dict, Tuple, Set, Optional, Union, Final 등이 있습니다. List, Dict, Tuple, Set은 말 그래도 파이썬의 list, dict, tuple, set을 나타내는 친구들입니다.
from typing import List, Dict, Tuple, Set
scores: List[int] = [95, 89, 72, 87]
people: Dict[str, int] = {"홍길동": 31, "변사또": 28, "장영실": 19}
fruits: Tuple[str, int] = ("apple", 7)
capital: Set[str] = {"Seoul", "Beijing", "Tokyo"}
Union, Optional
typing 모듈 중에서는 Union과 Optional을 특히 잘 알아야 합니다.
Union은 여러 개의 타입을 허용하고자 할 때 사용가능합니다.
from typing import Union
def print_age(age: Union[int, str]):
print("저는 " + str(age) + "살입니다.")
print_age(17)
print_age("열일곱")
Optional은 지정한 자료형 외에도 None이 허용될 때 유용하게 쓸 수 있습니다. 사실상 Union[int, None]과 Optional[int]는 같은 의미가 됩니다.
from typing import Optional
def introduce(name: str, age: Optional[int] = None):
print("제 이름은 " + name + "입니다.")
if age:
print("제 나이는 " + str(age) + "살입니다.")
else:
print("제 나이는 비밀입니다.")
print("-" * 20)
introduce("이순신", 36)
introduce("을지문덕")
Final
그리고 어떤 변수를 상수처럼 여기고 싶을 때는 Final을 사용할 수 있습니다.
from typing import Final
PI: Final[float] = 3.14
PI = 3.15
print(PI)
파이썬의 타입 힌트는 절대 타입을 강제하는 것은 아니기 때문에 상수로 타입 힌트를 준 PI에 다른 값으로 재할당하는 것이 가능하긴 합니다. 하지만 Final로 타입 힌트를 주면 IDE에서 보시는 것처럼 상수(constant)니 재할당하지 말라고 알려줍니다.
관련 글
- [python] Pydantic 이해하기 (data class보다 더 나은 듯?)
참고자료
[1] https://www.daleseo.com/python-typing/
'Dev > python' 카테고리의 다른 글
[python] 다른 경로에 있는 모듈 불러와서 사용하기, PYTHONPATH 환경변수 세팅 (0) | 2023.06.15 |
---|---|
[python] 추상 클래스(abstract class) 이해하기 (0) | 2023.06.14 |
[python] 객체의 속성을 읽고 쓰고 삭제하는 getattr, setattr, delattr 함수 (0) | 2023.06.13 |
[python] 파이썬 인기 formatter, Black으로 코드 스타일을 맞춰보자 (0) | 2023.05.29 |
[python] 오늘 날짜, 어제 날짜, 일주일 전 날짜 구하는 방법(datetime 모듈) (0) | 2023.05.19 |
[pandas] 데이터프레임의 특정 컬럼의 평균값 구하는 방법, df['컬럼명'].mean() (0) | 2023.05.18 |
[python] 내부망(폐쇄망)에 .whl 파일을 통해서 패키지 설치하는 방법 (0) | 2023.05.17 |
[python] json 모듈의 dumps(), loads() 차이 (0) | 2023.05.13 |