Python Type 어노테이션/힌트가 필요한 이유는?
Python은 동적 타입 언어(Dynamic language)로 실행하는 시점에 변수의 타입(Type)을 고려하며 체크하기 때문에 타입 힌팅을 통해 좀 더 방어적인 코드를 작성 할 수 있다.
mypy
mypy는 정적 타입의 검사기로 실행시 함수에 정상적으로 Type이 맞게 들어오는지 검사 해주는 역할을 한다.
# 라이브러리 설치
pip install mypy
# 실행 명령어
mypy test.py
# test.py
def add(a: int, b: int) -> int: # int형 변수 a와 b를 입력받아서 int형 값을 반환
return a + b
if __name__ == "__main__":
add(1, 2) # 성공
add('h', 3) # error 발생
Typing
- 파이썬 코드의 명시적인 코드 작성을 위해 함수 인자의 Type, Return Type등을 정의 해주는 것
# 라이브러리 설치
pip install typing
# 예제 코드
from typing import Dict, List, Tuple
from typing import Sequence, TypeVar, Any
from typing import Union
def typing_basic():
typing_list: List[str] = ["a1", "b1", "c1"]
typing_tuple : Tuple[int, int] = (10, 20)
typing_dict : Dict[str, bool] = {'a':True, 'b':False}
print(typing_list, typing_tuple, typing_dict, )
def typing_basic2(a:float, b:float) -> float:
typing_a, typing_b = a, b
return typing_a + typing_b
T = TypeVar('T')
def typing_basic3(val: Sequence[T])->T:
return val[0]
# Any : 어느것이 와도 괜찮음
def typing_basic4(val: Any)-> Any:
return val
# Union : Any보다 조금 더 구체적으로 정함
def typing_basic5(val : Union[int,float]):
return val
if __name__ == "__main__":
typing_basic()
print(typing_basic2(3.14, 2.5))
print(typing_basic3([77,2,3]))
print(typing_basic4('hh'), type(typing_basic4('hh')))
print(typing_basic5(3))
'Python > Utils' 카테고리의 다른 글
[Python Utils] Python 제너레이터 사용 (0) | 2022.08.25 |
---|---|
[Python Utils] Python Decorator 활용 (0) | 2022.08.25 |
[Python Utils] 코드 컨벤션 (pylint, flake8, pre-commit, mypy) (0) | 2022.08.24 |
[Python Utils] Python 코드 정리 Tool (Black, isort) (0) | 2022.06.30 |
[Python Web] Django / Flask / FastAPI 셋팅 (0) | 2022.04.28 |