파이썬에는 튜플이라는 자료구조가 있다.
어쩐지 파이썬에서는 튜플보다는 리스트가 더 사랑 받는 것 같지만 안전한 프로그래밍을 하기 위해서는 mutable한 리스트를 사용하는 것보다는 immutable한 튜플을 사용하는 것이 더 좋다고 생각한다.
그런데 이때 튜플에는 필드별로 따로 이름이 없기 때문에 불편하다. 예를 들어 아래와 같이 point
라는 튜플이 있을때
point = (1, 2)
이 point
튜플은 좌표 데이터를 나타낸다. 첫번째 필드를 X 좌표, 두번째 필드를 Y 좌표라고 할 수 있다.
이렇게 필드가 몇개 되지 않을 때는 그냥 아래와 같이 접근해도 헷갈리지 않지만
x = point[0]
y = point[1]
혹은 아래처럼 할 수도 있다.
x, y = point
튜플의 크기가 커지면 일일이 숫자로 접근하는 것은 어렵고 불편하다.
파이썬에는 네임드 튜플 named tuple 이라는 것이 있다. 말 그대로 튜플에 이름을 붙여주는 것인데 아래와 같이 사용한다.
import collections
Point = collections.namedtuple(
"Point", # 타입 이름
"x y", # 필드 이름
)
위와 같이 namedtuple
함수를 이용하면 Point
라는 이름의 타입이 클래스가 생성된다.
이제 이 Point
타입을 클래스를 이용하면 각 필드에 이름으로 접근할 수가 있다.
point = Point(1, 2)
print(point.x) # 1
print(point.y) # 2
특히 데이터베이스의 레코드를 다룰 때 이 네임드 튜플을 이용하면 매우 유용하다!
import sqlite3
con = connect("somedatabase.db")
cur = con.cursor()
sql = "SELECT x, y FROM point_table"
cur.execute(sql)
rows = cur.fetchall()
points = (Point._make(row) for row in rows)