파이썬 데이터 모델 추상화

학습 페이지

named Tuple

두 점사이의 거리를 구할때 튜플을 이용한다고 해보자.

# 일반적인 튜플
point1 = (1.0, 5.0)
point2 = (2.5, 1.5)

from math import sqrt
l_leng1 = sqrt((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2)

일반적인 튜플을 사용한 예제이다. 인덱스 기반으로 각 [0][1] 에 접근할 수 있지만, 그 인덱스번호에 의미를 부여할 순 없다!

이제 named tuple을 사용해보자. 그전에 named tuple이 뭔지 잠깐 알아보자.

https://docs.python.org/ko/3.13/library/collections.html#collections.namedtuple

기존 튜플이 인덱스 이용한 위치기반 접근법을 제공했다면, 네임드 튜플은 키워드 기반 접근법을 제공한다.

named tuple은 collections 라는 모듈에 있다.

# named tuple 사용
from collections import namedtuple

# named tuple 선언
Point = namedtuple('Point', 'x y')

# 두 점 선언 및 할당
pt3 = Point(1.0, 5.0)
pt4 = Point(2.5, 1.5)

l_lent2 = sqrt((pt3.x - pt4.x) ** 2 + (pt3.y - pt4.y) ** 2)

이제 pt3pt4 는 딕셔너리처럼 xy 라는 키워드로 각 값에 접근할 수 있다. 물론 인덱스로도 접근할 수 있다.

이를 통해 인덱스번호가 많아지더라도, 인덱스마다 이름을 부여해 의미가 형성되었으므로… 디버깅에 매우 유리해진다.

named tuple을 선언하는 여러가지 방식

학습 페이지

# named tuple 선언 방법1 (리스트 사용)
Point1 = namedtuple('Point', ['x', 'y'])

# named tuple 선언 방법2 (콤마 사용)
Point2 = namedtuple('Point', 'x, y')

# named tuple 선언 방법3 (띄어쓰기 사용)
Point3 = namedtuple('Point', 'x y')

# named tuple 선언 방법4 (예약어나 중복되는 키 사용 시 - rename옵션 true)
Point4 = namedtuple('Point', 'x y x class', rename=True) # Default=False
print(Point4)

# 출력
print(Point1, Point2, Point3, Point4)

image.png

named tuple은 클래스로 래핑되어있다는 것을 알 수 있다.