[Python] - Named Tuple

김진수·2020년 11월 23일
1
post-thumbnail
post-custom-banner

이번에는 named tuple을 알아보겠습니다. named tuple은 일반 튜플과는 조금 다릅니다. 일반 튜플은 인덱스로 접근하여 각 인덱스가 무슨 역할인지 알기 힘들지만 named tuple은 말그대로 "named" 이름으로 접근하기 때문에 무슨 역할인지 알기 쉽습니다. 이제 코드를 보면서 알아 보겠습니다.

일반적인 튜플

pt1 = (1.0,5.0)
pt2 = (2.5,1.5)
from math import sqrt
line_leng1 = sqrt((pt2[0] - pt1[0])**2 + (pt2[1] - pt1[1])**2)

코드를 보시면 튜플을 선언한 다음 "line_leng1"에 접근할 때 인덱스로 접근하는 것을 볼 수 있습니다. 그렇게 되면 위에서 설명한 것 처럼 각 인덱스가 무슨 수인지 알기 쉽지 않습니다.

코드 결과값

print(line_leng1)

Named Tuple 사용

from collections import namedtuple

이 코드는 collections라는 모듈에서 named tuple를 가져오는 코드입니다. named tuple를 사용하기 위해서는 무조건 이 코드가 필요합니다.

Kim = namedtuple('Kim' ,'x y')

이 코드는 namedtuple을 선언하는 코드입니다. "kim" 변수에 namedtuple("tuple이름", '원소 원소')식으로 선언하는 것입니다. 또한 선언방식은 여러가지가 있습니다.

Named tuple 선언방식

  • Point1 = namedtuple('Point', ['x','y'])
  • Point2 = namedtuple('Point', 'x, y')
  • Point3 = namedtuple('Point', 'x y')
  • Point4 = namedtuple('Point', 'x y x def', rename=True)

선언방식 4번째는 원소이름이 x로 중복이 되었고, def는 파이썬내의 함수를 만들때 사용하는 것이기 때문에 원소이름이 될 수 없기에 rename=True를 통해 python내에서 이름을 다시 지정해주는 것입니다. 그렇게 되면 오류가 발생하지 않습니다..

pt1 = Kim(1.0,5.0)
pt2 = Kim(2.5,1.5)

line_leng2 = sqrt((pt2.x - pt1.x)**2 + (pt2.y - pt1.y)**2)

코드 결과값

print(line_leng2)

이 코드는 위에 일반적 튜플과 결과값이 같은 코드입니다. 그렇지만 named tuple을 사용하여 구현한 것입니다. "pt1" 변수에 선언한 named tuple인 kim내의 각 원소에 들어갈 값을 저장하는 것입니다. 이제 pt1에는 x에는 1.0, y에는 5.0이 저장되었습니다. 이제 line_leng2를 "pt1"과 "pt2"내의 원소이름인 x,y로 접근하는 것을 볼 수 있습니다. 이름으로 접근하기 때문에 x, y가 무슨 수인지 알기 편한 장점이 있습니다.

profile
백엔드 개발자
post-custom-banner

0개의 댓글