Skip to content

Instantly share code, notes, and snippets.

@nattybear
Last active November 14, 2020 15:55
Show Gist options
  • Save nattybear/4488d01c20c5519141211903bc9ca744 to your computer and use it in GitHub Desktop.
Save nattybear/4488d01c20c5519141211903bc9ca744 to your computer and use it in GitHub Desktop.
파이썬 Named Tuple

튜플

파이썬에는 튜플이라는 자료구조가 있다.

어쩐지 파이썬에서는 튜플보다는 리스트가 더 사랑 받는 것 같지만 안전한 프로그래밍을 하기 위해서는 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)

대문 링크

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment