Python] Packing & Unpacking

패킹, Packing

파이썬에서 기본 패킹은 튜플로 이루어진다.

튜플 패킹 : 하나 이상의 값을 튜플로 묶는 행위

1
2
3
a = 1,2,3

print(a) #(1, 2, 3)

* : 연산자로 쓰이기도 하지만, 패킹으로 쓰이기도 한다.

언패킹으로 쓰일 때는 함수 인자 전달에 대해서 쓰일 때라고 보면 된다.

1
2
3
4
5
6
7
8
9
10
a, b, *c = [1,2,3,4,5,6,7]

print(a) #1
print(b) #2
print(c) #[3, 4, 5, 6, 7]
a, *b, c = [1,2,3,4,5,6,7]

print(a) #1
print(b) #[2, 3, 4, 5, 6]
print(c) #7

함수 반환도 동일하다.

1
2
3
4
5
6
7
8
9
10
11
def f():
return 1,2,3,4,5

*a, b = f()
print(a) #[1,2,3,4]
print(b) #5
def f(a, b, *c):
print('a:',a,'\tb:',b, '\tc:',c)
#a: 1 b: 2 c: (3, 4, 5, 6, 7)

f(1,2,3,4,5,6,7)

언패킹, Unpacking

튜플 언패킹 : 튜플에 묶여 있는 값들을 풀어내는 행위

1
2
3
a, b, c = (1,2,3) #[1,2,3] 리스트로도 가능

print(a, b, c) #1 2 3

Set

1
2
3
a, b, c = {3,5,7}
print(type({3,5,7})) #<class 'set'>
print(a, b, c) #3 5 7

Dictionary

1
2
3
a, b, c = {4:3,2:5,3:7}

print(a, b, c) #4 2 3

*이 언패킹으로 쓰일 때

1
2
3
4
5
def f(a,b,c,d,e):
print(a, b, c, d, e)

a = [1,2,3,4,5]
f(*a) #1 2 3 4 5

Argument에 *를 쓰지 않는다면 아래와 같은 에러가 발생한다.

1
2
3
4
5
6
def f(a,b,c,d,e):
print(a, b, c, d, e)

a = [1,2,3,4,5]
f(a)
TypeError: f() missing 4 required positional arguments: 'b', 'c', 'd', and 'e'