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. 네임드 튜플 언패킹
- 튜플과 마찬가지로 네임드 튜플을 대상으로도 언패킹 할 수 있음
- 일반 튜플과 마찬가지로 함수에 값을 전달할 때에도 *을 붙여서 언패킹을 할 수 있음
'윤성우의 열혈 파이썬 (중급)' 카테고리의 다른 글
Story 14. dict의 루핑 기술과 컴프리헨션 (0) | 2021.07.22 |
---|---|
Story 13. dict의 생성과 zip (0) | 2021.07.20 |
Story 11. 튜플의 패킹과 언패킹 (0) | 2021.07.18 |
Story 10. 제너레이터 표현식 (0) | 2021.07.16 |
Story 05. Iterable 객체와 Iterator 객체 (0) | 2021.07.15 |