튜플 언패킹은 튜플의 요소들을 한꺼번에 변수에 할당하는 것을 의미한다. 이 기법은 파이썬에서 매우 유용하게 사용되며, 코드를 더 간결하고 직관적으로 만들 수 있다.
기본 개념
튜플 언패킹의 기본 형식은 다음과 같다.
a, b, c = (1, 2, 3)
위의 코드에서 (1, 2, 3) 튜플의 각 요소가 변수 a, b, c에 각각 할당된다.
기본 튜플 언패킹
point = (10, 20)
x, y = point
print(f"x: {x}, y: {y}")
이 코드의 출력은 x: 10, y: 20이 된다. point 튜플의 첫 번째 요소는 x에, 두 번째 요소는 y에 할당된다.
다양한 상황에서의 튜플 언패킹
예제 1: 함수 반환값 언패킹
튜플 언패킹은 함수가 여러 값을 반환할 때 유용하다.
def get_min_max(numbers):
return min(numbers), max(numbers)
numbers = [3, 5, 1, 9, 7]
min_value, max_value = get_min_max(numbers)
print(f"Min: {min_value}, Max: {max_value}")
이 코드의 출력은 Min: 1, Max: 9가 된다. get_min_max 함수가 반환한 튜플 (min(numbers), max(numbers))의 요소가 각각 min_value와 max_value에 할당된다.
예제 2: 리스트 언패킹
튜플뿐만 아니라 리스트에서도 동일하게 적용된다.
numbers = [4, 5, 6]
a, b, c = numbers
print(a, b, c)
이 코드의 출력은 4 5 6이 된다.
예제 3: 별표(*)를 사용한 언패킹
별표(*)를 사용하면 나머지 모든 값을 리스트로 받을 수 있다.
numbers = [1, 2, 3, 4, 5]
a, *b, c = numbers
print(a) # 1
print(b) # [2, 3, 4]
print(c) # 5
이 코드의 출력은 1, [2, 3, 4], 5가 된다. a에는 첫 번째 값이, c에는 마지막 값이 할당되고, 나머지 값들은 리스트 b에 할당된다.
예제 4: 중첩된 튜플 언패킹
중첩된 튜플도 언패킹할 수 있다.
data = ('Alice', (25, 'Female'))
name, (age, gender) = data
print(name) # Alice
print(age) # 25
print(gender) # Female
이 코드의 출력은 Alice, 25, Female이 된다. data 튜플의 첫 번째 요소는 name에, 두 번째 요소는 중첩된 언패킹을 통해 age와 gender에 각각 할당된다.
주의사항
변수 개수와 요소 개수 일치: 언패킹할 때 변수의 개수와 튜플의 요소 개수가 일치해야 한다. 그렇지 않으면 ValueError가 발생한다.
a, b = (1, 2, 3) # ValueError: too many values to unpack (expected 2)
별표(*) 사용: 별표를 사용하면 가변적인 요소를 처리할 수 있지만, 리스트로 수집된다는 점을 유의해야 한다.
*a, b = (1, 2, 3, 4)
print(a) # [1, 2, 3]
print(b) # 4