1. 패킹과 언패킹
- 튜플 패킹(tuple packing)
: 튜플로 값을 묶는 행위
- 튜플 언패킹(tuple unpacking)
: 튜플로 묶여 있는 값들을 풀어내는 행위
| 튜플 패킹 | 하나 이상의 값을 튜플로 묶는 행위 |
| 튜플 언패킹 | 튜플에 묶여 있는 값들을 풀어내는 행위 |
- 예를 들어, 삼각형의 정보(밑변과 높이 정보) 튜플로 묶은 것이 튜플 패킹

- 또한, 우리에게 익숙한 튜플 패킹 방법

- 튜플 언패킹 예제
- 주의할 점 : 튜플에 저장된 값의 수와 이를 저장할 변수의 수가 일치해야 함

- 언패킹 과정에서 둘 이상의 값을 리스트로 묶어서 하나의 변수에 저장하는 것도 가능함

- 둘 이상의 값을 리스트를 묶을 때 *를 사용함
- 튜플이 아닌 리스트로 묶었음
- 뒤쪽 값들만 묶을 수 있는 것이 아니라 중간의 값, 처음 값도 묶을 수 있음


- 물론 언패킹은 튜플 말고 리스트를 대상으로 동일하게 작용함

2. 함수 호출 및 반환 과정에서의 패킹과 언패킹
- 패킹과 언패킹은 함수의 호출과 반환 과정에서도 일어남

- return문 구상
- 튜플의 패킹에서 소괄호는 생략이 가능함
- 즉, 패킹되어 반환됨
- 따라서 함수가 반환하는 값을 다음과 같이 저장할 수 있음


- show_nums(n1, n2, *other) : 세 번째 이후 값들은 튜플로 묶여 other에 전달됨
- 매개 변수 앞에 *가 오는 것 : 나머지 값들은 튜플로 묶여서 이 변수에 저장하겠음
- 따라서 다음과 같이 전달되는 값의 수에 상관없이 모든 정수의 합을 계산해서 반환하는 함수도 만들 수 있음

- sum(*nums) : 전달되는 모든 값들을 하나의 튜플로 묶어서 nums에 저장

- 그러나 위처럼 함수를 호출할 때 *를 사용하면 튜플 언패킹 기능이 된다.
- 따라서 *는 사용되는 위치에 따라서 패킹을 의미하기도 하고, 언패킹을 의미하기도 함

- show_man(*p) : 리스트를 전달하는데 *을 붙인 상황
- 위와 같이 언패킹은 리스트를 대상으로 작동함
- 튜플 안에 또 다른 튜플이 존재하는 경우의 언패킹 방법

- t = (1, 2, (3, 4)) : 튜플 안에 튜플이 있는 경우
- a, b, (c, d) = t : 튜플 안의 값의 구조와 동일한 형태로 변수를 선언
- 즉 1, 2, (3, 4) 처럼 네 개의 변수에 나눠서 담을 땐, a, b, (c, d) 와 같이 동일한 형태로 변수를 선언해서 언패킹 해야함
| p = 'Hong', (32m, 178), '010-1234-56xx', 'Korea' |

- 이름과 키 정보만 필요하다고 가정했을 때, 연패키을 진행한 다음에 이름과 키 정보만 사용하면 됨
- 튜플에 소괄호를 생략함
- 그런데 위처럼 키 정보를 얻기 위해 불필요한 정보까지 변수에 담는 것은 번거로움

- 위처럼 이름과 키 정보만 뽑아내는 것이 더 편리함
- 불필요한 정보가 있는 위치에 _을 대신 넣었음 : 여기서 사용된 _도 변수임
- 다만, 불필요한 정보라는 것을 의미하기 위해서 변수의 이름으로 잘 쓰지 않는 _를 그 위치에 넣어 둔 것임
- 이것도 일종의 관례임!
3. for 루프에서의 언패킹

- for루프에서 제일 처음 변수 n과 h에 저장되는 값
| for n, h in ps | ('Lee', 172)에서 'Lee' |
| for n, h in ps | ('Lee', 172에서 172 |
- 두 번째 튜플의 값이 각각 n과 h에 저장되어 for 루프의 두 번째 반복이 진행됨
| for n, h in ps | ('Jung', 182)에서 'Jung' |
| for n, h in ps | ('Jung', 182)에서 182 |
- 이러한 형태의 언패킹은 리스트를 대상으로도 동일하게 작용함

'윤성우의 열혈 파이썬 (중급)' 카테고리의 다른 글
| Story 13. dict의 생성과 zip (0) | 2021.07.20 |
|---|---|
| Story 12. 네임드 튜플 (0) | 2021.07.19 |
| Story 10. 제너레이터 표현식 (0) | 2021.07.16 |
| Story 05. Iterable 객체와 Iterator 객체 (0) | 2021.07.15 |
| Story 03. 깊은 복사와 얕은 복사 (0) | 2021.07.15 |