파이썬(Python) 클린 코드를 작성할 때 annotation을 많이 쓴다. annotation은 변수 타입, 함수의 입출력값에 대한 타입을 표현하는 방식을 말한다. 이때 typing 모듈을 이용하면 타입을 좀 더 정교하게 표현할 수 있다. 이번 포스팅에서는 typing 모듈을 이용하여 타입 annotation 방법을 알아보고자 한다.
annotation에 대한 개념은 아래 포스팅을 참고하기 바란다.
[클린 코드] 2. docstring과 annotation을 이용한 코드 문서화
typing 모듈을 이용한 정교한 타입 설정
여기서는 자주 사용하는 타입에 대해서 설명한다.
1) 파이썬의 기본 객체: Set, Tuple, List, Dict
typing은 파이썬 내장 모듈이므로 설치할 필요 없이 바로 임포트할 수 있다. 여기서는 파이썬 기본 객체인 Set, Tuple, List, Dict 타입을 설정해 보자.
아래 코드는 Set, List, Tuple, Dict 타입으로 설정하여 변수를 선언한다.
from typing import Set, List, Tuple, Dict
set_var : Set
list_var : List = [1,2,3,4]
tuple_var : Tuple
dict_var : Dict = {'A':'B'}
하지만 위와 같은 경우는 typing을 안 써도 아래와 같이 기본 객체를 이용하여 타입 설정을 할 수 있다.
set_var : set
list_var : list = [1,2,3,4]
tuple_var : tuple
dict_var : dict = {'A':'B'}
그렇다면 굳이 typing을 쓰는 이유는 무엇일까? 바로 디테일한 타입 설정을 할 수 있기 때문이다. 디테일하다는 것은 리스트로 예를 들면 원소에 대한 타입까지 지정할 수 있다는 것이다.
set_var : Set[str] = {'A', 'B'} ## 모든 원소가 str인 셋
list_var : List[int] = [1,2,3,4] ## 모든 원소가 int인 리스트
tuple_var : Tuple[int, str, float] = [3, 'Hi', 3.14] ## 원소의 타입을 혼합할 수 있다.
dict_var : Dict[str, str] = {'A':'Apple'} ## 키와 밸류가 str인 딕셔너리
2) 함수의 디폴트 값 : Optional
Optional은 None을 포함하는 인자 타입을 지정할 때 유용하게 쓰일 수 있다.
from typing import Optional
def sum_two_number(a : int, b : Optional[int] = None) -> int:
if b is not None:
return a+b
else:
return a
3) 불변의 상수 : Final
Final은 재할당이 불가능한 상수에 대해서 타입을 지정하고자 할 때 유용하다. Final은 파이썬 3.8 이상에서 지원된다.
from typing import Final
CONSTANT : Final[float] = 3.14
4) 여러 타입 허용 : Union
Union은 여러 타입을 지정하고 싶을 때 사용한다.
from typing import Union
## 입출력값 모두 int 또는 float 타입이 될 수 있다.
def increase(a : Union[int, float]) -> Union[int, float]:
return a+1
5) 순회가능한 모든 객체의 어머니 : Iterable
모든 순회가능한 객체를 이들의 추상화(상위) 타입으로 지정하고 싶을 때 Iterable을 쓰면 된다.
from typing import Iterable
def sum_iterable(data : Iterable[int]) -> int:
return sum(data)
'프로그래밍 > Python' 카테고리의 다른 글
파이썬(python) 날짜 다루기 (feat. datetime) (0) | 2023.03.18 |
---|---|
파이썬(Python) textwrap 모듈을 이용한 긴 문장(문자열) 정리하기(생략, 줄바꿈). (0) | 2023.03.12 |
파이썬(Python) pickle을 이용한 파이썬 객체 저장 (0) | 2023.02.03 |
파이썬(Python) ast 모듈을 이용하여 문자(String) 타입의 리스트나 튜플, 딕셔너리를 리스트, 튜플, 딕셔너리 타입으로 변환하기 (feat. literal_eval) (0) | 2023.01.19 |
파이썬(Python) 여러 패키지(Packages, 모듈) 한번에 설치하기 (feat. pip install -r requirements.txt) (0) | 2023.01.13 |
댓글