C나 C++, Java는 함수나 클래스를 이용할 때, 파라미터의 타입이나 출력값의 타입 등을 지정해줄 수 있습니다.
타입을 미리 지정하면 오류를 줄이거나 발견하기 쉽고, 코드의 가독성을 좀 더 올릴 수 있는 장점이 있습니다.
python에서도 typing 모듈을 이용한 type annotation을 지원해줍니다. 오늘은 그 중에서도 Named Tuple에 대해 알아보려 합니다.
1. 딕셔너리(Dict)
person = {'height': 180,
'weight': 75,
'name': 'koo'}
데이터를 표현할 때 딕셔너리 자료형을 사용하면, 데이터의 속성을 나타낼 수 있습니다.
딕셔너리 자료형에는 몇가지 문제가 있습니다.
- 약간의 오버헤드가 있는 비효율적인 표현 방식이기 때문에 필요 이상의 메모리를 차지
- 딕셔너리의 key에 접근할 때, 오타가 발생한다면 새로운 속성이 생기거나 다른 값이 변경
- 다양한 타입으로 구성된 딕셔너리의 경우, 타입 어노테이션을 사용에 한계 존재
2. namedtuple
collections에 있는 namedtuple은 tuple과 비슷하지만 key-value 관계를 갖도록 데이터를 생성할 수 있습니다.
from collections import namedtuple
personinfo = namedtuple('person', ['height', 'weight', 'name'])
person = personinfo(180, 75, 'koo')
print(person.height)
print(person.name)
namedtuple을 사용하면 딕셔너리처럼 Dict['key name']을 사용하는 것이 아닌 " . "을 사용해 속성에 접근하는 것처럼 사용합니다.
3. Type Annotation
from typing import NamedTuple
class PersonInfo(NamedTuple):
height: float
weight: float
name: str
person = PersonInfo(180, 75, 'koo')
print(person.height)
print(person.name)
typing에 있는 NamedTuple을 사용하면 타입 어노테이션을 사용할 수 있습니다.
새로운 클래스를 NamedTuple을 상속받아 만들고, 인스턴스를 만들어 데이터를 사용할 수 있습니다.
NamedTuple을 사용하면 에디터를 사용해 속성에 접근할 수 있고, 앞서 딕셔너리에서 언급한 단점들을 보완할 수 있는 장점이 있습니다.
하지만 NamedTuple은 Tuple과 같이 생성되면 값을 수정할 수 없습니다. 그렇기 때문에 값의 변화가 없는 데이터를 표현할 때 유용하게 사용할 수 있을 것 같습니다.
person.height = 181
'Python > Syntax' 카테고리의 다른 글
[Pandas] 빈도표 구하기, 카이제곱검정(crosstab, chi2_contingency) (0) | 2022.09.10 |
---|---|
[Python] Dictionary 대신 사용할 수 있는 dataclass (0) | 2022.09.10 |
[colab] colab에서 ipynb파일 import하기 (0) | 2022.09.02 |
[matplotlib] 텍스트 추가하기, annotate (0) | 2022.09.02 |
[Pandas] DataFrame 조건부 검색 시 주의사항 (0) | 2022.08.19 |