파이썬에는 값으로 이뤄진 불변 순서쌍을 만들어낼 수 있는 tuple 내장 타입이 있다. 가장 짧은 튜플은 딕셔너리의 키 - 갓 쌍과 비슷하게 두 값으로 이뤄진다.
snack_calories = {
'감자칩': 140,
'팝콘': 80,
'땅콩': 190
}
items = tuple(snack_calories.items())
print(item)
>>>
(('감자칩', 140), ('팝콘', 80), ('땅콩', 190))
# 튜플에 있는 값은 숫자 인덱스를 사용해 접근할 수 있다.
item = ('호박엿', '식혜')
firlst = item[0]
second = item[1]
print(first, '&', second)
>>>
호박엿 & 식혜
## 일단 튜플이 만들어 지면 대입을 통해 튜플의 값을 변경할 수 없다.
파이썬에는 언패킹 구문이 있다.
언패킹 구문을 사용하면 한 문장 안에서 여러 값을 대입하 수 있다.
언패킹(Unpacking)은 파이썬에서 데이터 구조(예: 리스트, 튜플, 사전)의 요소를 개별 변수에 할당하는 과정을 말합니다. 기본적으로 언패킹은 데이터 구조의 각 요소를 변수에 할당하기 위해 대입 연산자(=)를 사용하는 것입니다.
# 언패킹 예제
item = ('호박엿', '식혜')
first, second = item # 언패킹
print( first, '&', second)
>>>
호박엿 & 식혜 # 언패킹을 활용한 출력
기존의 언어는 값을 맞바꾸려면 임시변수를 정의한 후 바꿀값을 임시변수에 저장한 후 값을 바꾸지만 파이썬의 언패킹 기능을 사용하면 임시변수를 사용하지 않고도 값을 맞 바꿀수 있다.
# 기존의 버블 소트 임시변수를 선언후 바꿈
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
# 언패킹을 활용한 버블소트
def bubble_sort_unpacking(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j] # 언패킹을 활용하여 값 교환
어떻게 이런 맞바꾸기가 가능하냐면 우선 대입문 우항 이 계산되고 그결괏값이 이름이 없는 새로운 tuple 에 저장된다. 그 후 대입문 좌항에 있는 언패킹 패턴 (arr[j], arr[j+1]) 을 통해 임시 tuple에 있는 값이 a[i-1]과 a[i]라는 변수에 각각 저장된다.
# 언패킹을 사용하지 않는 list를 언패킹 하는 코드
snack = [('베이컨', 350), ('도넛', 240), ('머핀', 190)]
for i in range(len(snack)):
item = snack[i]
name = item[0]
calories = item[1]
print(f"#{i+1}: {name}은 {calories} 칼로리입니다.")
코드는 잘 작동하지만 가독성이 좋지않다.
# enumerate 내장 함수와 언패킹을 사용한 코드
for rank, (name, calories) in enumerate(snacks, 1):
print(f"#{rank}: {name}은 {calories} 칼로리입니다.")
이런식의 루프가 필요할 떄 이 방법이 파이썬다운 방식이다 코드가 짧고 이해하기 쉽다. 일반적으로 인덱스를 사용해 무언가에 접근할 필요하 전혀 없다.
언패킹을 현명하게 사용하면 가능한 한 인덱스 사용을 피할 수 있고, 더 명확하고 파이썬다운 코드를 만들 수 있다.
Reference. Effective Python