언패킹 구문을 사용하면 한 문장 안에서 여러 값을 대입할 수 있다.
item = ("hello", world)
first, second = item # 언패킹
print(first,"&",second)
➜
hello & world
✍🏻 튜플이 쌍이라는 사실을 알고 있다면 두 변수를 한 줄에 선언해서 사용할 수 있다. 언패킹은 이런식으로 여러 값을 한줄에 대입이 가능하다.
✍🏻리스트, 시퀀스, 이터러블 안에 여러 계층으로 이터러블이 들어간 경우 등 다양한 패턴을 언패킹 구믄에 사용할 수 있다.
student_info = {
"철수" : (17, "컴퓨터공학과"),
"유리" : (18, "건축공학과"),
"짱구" : (15, "영어영문학과")
}
((name1,(student_id1, major1)),
(name2,(student_id2, major2)),
(name3,(student_id3, major3))
) = student_info.items()
print(f'name : {name1} , 전공 : {major2}, 학번 : {student_id1}')
print(f'name : {name2} , 전공 : {major2}, 학번 : {student_id2}')
print(f'name : {name3} , 전공 : {major3}, 학번 : {student_id3}')
➜
name : 철수 , 전공 : 건축공학과, 학번 : 17
name : 유리 , 전공 : 건축공학과, 학번 : 18
name : 짱구 , 전공 : 영어영문학과, 학번 : 15
딕셔너리를 이용한 언패킹도 가능하다. 하지만 이런 코드는 추천하지 않는다.
일반적인 bubble_sort를 구현할려면 임시 변수를 정의해서 크기에 따라 값을 교환해야 한다.
def bubble_sort(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i-1]:
temp = a[i]
a[i] = a[i-1]
a[i-1] = temp
✍🏻 언패킹을 사용하면 임시 변수가 사용할 필요가 없고 한 줄로 교환이 가능하다.
def bubble_sort(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i-1]:
a[i], a[i-1] = a[i-1], a[i]
언패킹을 사용하면 코드가 줄어들고 가독성이 훨씬 좋아진다.
foods = [('베이컨', 350), ('도넛', 240), ('머핀', 190)]
for i in range(len(foods)):
item = foods[i]
food = item[0]
price = item[1]
print(f'{i+1} food : {food}, price : {price}')
이런 식으로 코드를 작성하면 복잡해지고 가독성이 좋지 않다. 언패킹을 활용하면 코드도 짧아지고 가독성이 훨씬 좋아진다.
for index, (food, price) in enumerate(foods, 1):
print(f"#{index}: food -> {food}, price -> {price}")
✍🏻반복문에서도 언패킹이 사용이 가능하다. 언패킹을 잘 사용하면 가독성 뿐만 코드 수를 보기 좋게 만들 수 있다.
- 파이썬 언패킹은 일반화돼 있으므로 모든 이터러블에 적용할 수 있다. 그리고 이터러블이 여러 계층으로 내포된 경우에도 언패킹을 적용할 수 있다.
- 인덱스를 사용해 시퀀스 내부에 접근하는 대신 언패킹을 사용해 시각적인 잡음을 줄이고 코드를 더 명확하게 만들라