1. 네임드 튜플의 이해와 작성 

 

 - 튜플의 패킹과 언패킹에서 처음 시작한 예

 - tri_one = (12, 15) : 삼각형 밑변 12와 높이 15를 묶어 놓은 것 

 - 그러나 이것은, 책에 12가 밑변이고 15가 높이라고 말하지 않았다면 그 사실을 몰랐을 것

 - 따라서, 왼쪽에 있는 값이 밑변이고 오른쪽에 있는 값이 높이라는 정보를 튜플에 새기기 위해 주석으로 표시하고자 함  

      ==> 네임드 튜플(named tuple)

 

 - from collections import namedtuple : collections 모듈의 namedtuple 호출 위해서 명령어 작성

 - Tri : 네임드 튜플 클래스 만듦 

 - t : 네임드 튜플 객체 생성

 - print : 일반 튜플과 동일한 방법으로 접근 가능함 

 

Tri = namedtuple('Triangle', ['bottom', 'height'])
'Triangle' Triangle이라는 이름을 붙여서 클래스 생성
'bottom'  첫 번째 위치의(값의) 이름은 bottom으로 정하겠음
'height' 두 번째 위치의(값의) 이름은 height으로 정하겠음

 - t = Tri(3, 7) : 첫 번째 값은 3, 두 번째 값은 7인 네임드 튜플 객체 생성

 - 이렇게 하면 Triangle 클래스의 객체가 생성되어 변수 t에 저장됨 

 - 그러나, 위와 같이 함수가 호출되면 변수 Tri에는 Triangle 클래스에 정보가 담기게 되는데, 이 변수를 이용해서 네임드 튜플 객체(Triangle 클래스의 객체를) 생성해야 함 

 - 즉, 클래스의 이름은 Triangle은 객체 생성에 사용되지 않음 

 - 그렇다면 굳이 Triangle이라는 이름을 굳이 생성한 이유는? 오류가 발생했을 때 오류의 원인을 찾는데 도움이 됨 

 - 이것은 추후에 설명 

 

 - 어쨌든 이렇게 해서 생성한 네임드 튜플 객체는 다음과 같이 사용할 수 있음

  - 일반 튜플과 동일하게 인덱스 값 기반 접근 

 

  - 네임드 튜플의 장점으로, 다음과 같이 이름으로도 접근이 가능함 

 

 - 물론 네임드 튜플도 튜플과 마찬가지로 저장된 값을 수정하지 못함 

 - 수정하려고 하면 다음과 같이 오류가 발생함

 - 위의 오류 메세지에서 Triangle이라는 이름이 보임 

 - 이렇듯 네임드 튜플에서 오류가 발생하면 클래스의 이름이 출력되어 오류가 발생한 원인 또는 위치를 찾는데 도움을 줌 

 - 이것이 네임드 튜플을 클래스에 이름을 붙이는 이유 

 

 - 클래스의 이름과 변수의 이름이 같아도 함 

 - 이것이 필자가 권장하는 방법

Tri = namedtuple('Tri', ['bottom', 'height'])

 

 - 또한 네임드 튜플의 이름을 지정할 때 리스트에 담아서 전달하지 않고 다음과 같이 하나의 문자열에 담아서 전달해도 됨

Tri = namedtuple('Tri', 'bottom height')

 

 

2. 네임드 튜플 언패킹 

 - 튜플과 마찬가지로 네임드 튜플을 대상으로도 언패킹 할 수 있음 

 

 - 일반 튜플과 마찬가지로 함수에 값을 전달할 때에도 *을 붙여서 언패킹을 할 수 있음 

 

+ Recent posts