일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 튜플
- 중급파이썬
- Props
- 채팅
- async
- lambda
- EC2
- node
- TypeScript
- SAA
- S3
- pandas
- MongoDB
- dict
- Class
- flask
- crud
- git
- wetube
- RDS
- merge
- socket io
- Vue
- NeXT
- AWS
- SSA
- docker
- 파이썬
- react
- 카톡
- Today
- Total
초보 개발자
12강 네임드 튜플 본문
[네임드 튜플의 이해와 작성]
tri_one = (12, 15) #삼각형 밑변 12와 높이 15를 묶어 놓은 것)
tri_one
(12, 15)
주석을 통해 앞에 있는 12가 밑변이고 15가 높이라고 말하지 않았다면 이 사실을 몰랐을 것이다. 이러한 단점을 보완하기 위해서 만든것이 정보를 튜플에 새겨 놓을 수 있도록 한 것이 네임드 튜플이다.
튜플도 클래스의 객체이다.
우리는 튜플에 각 각 이름을 부여할 것이다. 이것은 무엇을 의미하냐면
튜플로 사용할 수 있는 클래스를 하나 만든다는 의미이고, 일반적으로 클래스를 만들려면
귀찮으니까 이름을 부여한 튜플을 생성할 수 있는 클래스를 만드는 방법으로
파이썬에서 namedtuple이라는 함수를 제공하고 있다.
파이썬 : 너는 클래스의 이름하고, 튜플의 각 위치별로 부여할 이름만 결정해 그럼 클래스는 내가 만들어 줄게
이게 namedtuple함수를 제공한 목적이 된다.
그래서 첫번째의 인자는 클래스의 이름을 전달, 두번째 인자에는 부여할 이름을 명시
자세한 사항을 아래를 참조하자
from collections import namedtuple # collections 모듈의 namedtuple 호출 위해서
Tri = namedtuple('Triangle', ['bottom','height']) # 네임드 튜플 클래스 만듦
t = Tri(3,7) # 네임드 튜플 객체 생성
print( t[0], t[1]) #일반 튜플과 동일한 방법으로 접근 가능하다.
3 7
print(t.bottm, t.height) #일반 튜플과 달리 이름으로도 접근이 가능하다.
3 7
이는 Triangle이라는 이름의 튜플의 성격을 갖는 클래스를 만들기 위한 함수 호출이다.
첫번째 값으로 전달된 Triangle이 만들어지는 클래스의 이름이 된다. 물론 기본 골격은 튜플이다.
다만 일반 튜플과 달리 위치별로 이름을 갖는다는 특징이 있다.
['bottom','height']
첫번째 위치의 값은 bottom, 두번째 위치의 값은 height라고 정했다.
그럼 파이썬은 namedtuple내에서 그러한 클래스를 만들고 그 클래스를 Tri라는 변수가 그걸 참조하는 형태가 된다.
Tri(3,7) # Tri를 활용하여 첫번째 값 두번째 값을 넣어주었다.
Triangle이라는 이름이 사용되어져야 하는 것이 아니고 객체를 참조하는 Tri가 활용이 되어야 한다.
따라서 3은 bottom이 되고 7은 height이 되는 것이다.
print(t[0], t[1]) # 우리가 일반적으로 알고 있는 튜플접근 방식으로도 접근 가능하고
print(t.bottom, t.height) # 이름을 통해서도 접근이 가능하다. 이것이 네임드 튜플이 갖는 장점이다.
근데 쭉 보니까 Triangle이라고 정해준 이름이 필요가 없는 것 같다? 객체 생성할때도 참조하고 있는 Tri를 통해서 생성을 하지 Triangle 통해서 생성하지 않는다. 그럼 어떠할 때에 의미가 있지??
Triangle은 오류메시지를 출력해 줄 때 의미가 있다!!!!
물론 네임드 튜플도 튜플과 마찬가지로 저장된 값을 수정하지 못한다. 수정하려고 하면 오류가난다.
TypeError: 'Triangle' object does not support item assignment
이렇듯 네임드 튜플에서 오류가 발생하면 클래스의 이름이 출력이 되어 오류가 발생한 원인을 찾는데 도움을 주고 이것이 네임드 튜플의 클래스에 이름을 붙이는 이유이다.
Tri = namedtuple(Tri, ['bottom', 'height']) # 권장하고 싶은 방법
클래스의 이름과 변수의 이름을 동일하게 해서 만들면 불필요한 혼동을 줄여줄 수 있다.
Tri = namedtuple('Tri', 'bottom height') #공백을 기준으로 나눔
또한 네임드 튜플의 이름을 지정할 때 리스트에 담아서 전달하지 않고 위와 같이 하나의 문자열에 담아서 전달해도 된다.
[네임드 튜플 언패킹]
t = Tri(12,79) # 네임드 튜플 객체 생성
a, b = t # 언패킹
print(a,b)
12, 79
네임드 튜플이나 튜플이나 언패킹은 동일하게 작동
함수에 값을 전달할 때에도 *을 붙여서 언패킹 할 수 있다. 일반 튜플과 마찬가지로 말이다.
def show(n1,n2):
print(n1,n2)
t = Tri(3, 8)
show(*t) # 값의 전달 과정에서 언패킹
3 8
'Python > 윤성우 열혈 파이썬' 카테고리의 다른 글
14강 dict의 루핑 기술과 컴프리헨션 (0) | 2021.12.22 |
---|---|
13강 dict의 생성과 zip (0) | 2021.12.22 |
11강 튜플의 패킹과 언패킹 (0) | 2021.12.22 |
10강 제너레이터 표현식 (0) | 2021.12.16 |
9강 제너레이터 함수 (0) | 2021.12.16 |