이번에는 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)
from collections import namedtuple
이 코드는 collections라는 모듈에서 named tuple를 가져오는 코드입니다. named tuple를 사용하기 위해서는 무조건 이 코드가 필요합니다.
Kim = namedtuple('Kim' ,'x y')
이 코드는 namedtuple을 선언하는 코드입니다. "kim" 변수에 namedtuple("tuple이름", '원소 원소')식으로 선언하는 것입니다. 또한 선언방식은 여러가지가 있습니다.
선언방식 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가 무슨 수인지 알기 편한 장점이 있습니다.