반응형

파이썬에서 언패킹(unpacking)은 하나의 데이터 구조(예: list, tuple, dict 등)에 포함된 여러 값을 한 번에 변수에 할당하거나, 함수 호출에서 사용하기 위해 분리하는 기능이다. 이를 통해 코드가 간결해지고 가독성이 높아진다.

다양한 사례를 통해 언패킹으로 어떤 코드 작성이 가능한지 살펴본다.

 

1. Sequence 언패킹

Sequence(예: list, tuple 등)의 값을 변수에 한 번에 할당할 수 있다.

# tuple 언패킹
a, b, c = (1, 2, 3)
print(a, b, c)  # 출력: 1 2 3

# list 언패킹
x, y, z = [4, 5, 6]
print(x, y, z)  # 출력: 4 5 6

# string 언패킹
p, q, r = "ABC"
print(p, q, r)  # 출력: A B C

*와 함께 사용한 언패킹

a, *b, c = [1, 2, 3, 4, 5]
print(a)  # 출력: 1
print(b)  # 출력: [2, 3, 4]
print(c)  # 출력: 5

 

2. 딕셔너리 언패킹

dict의 key-value 쌍을 언패킹할 때 **를 사용한다.

my_dict = {'y': 20, 'x': 10}
def my_func(x, y):
    print(x)
    print(y)

my_func(**my_dict)
10
20

my_dict가 언패킹되면서, 함수에 argument로 y=20, x=10 형태로 전달된다.

 

3. 함수 호출에서의 언패킹

함수에 여러 개의 argument를 전달할 때 *와 **를 사용하여 list, tuple, dict를 언패킹할 수 있다.

# list 및 tuple 언패킹
def add(a, b, c):
    return a + b + c

values = [1, 2, 3]
print(add(*values))  # 출력: 6

# dict 언패킹
kwargs = {'a': 1, 'b': 2, 'c': 3}
print(add(**kwargs))  # 출력: 6

 

4. 패킹과 언패킹의 조합

함수 정의에서 *args**kwargs를 사용하면 가변 길이의 argument를 받아올 수 있다. 이를 활용하면 언패킹과 조합이 가능하다.

def func(*args, **kwargs):
    print("args:", args)
    print("kwargs:", kwargs)

func(1, 2, 3, x=10, y=20)
args: (1, 2, 3)
kwargs: {'x': 10, 'y': 20}

 

5. 응용 예시

list 합치기

list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged = [*list1, *list2]
print(merged)  # 출력: [1, 2, 3, 4, 5, 6]

dict 합치기

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict)  # 출력: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

 

반응형

+ Recent posts