BETTER WAY 6) 인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라

C__W.A·2021년 7월 15일
0

이펙티브 파이썬

목록 보기
5/8
post-thumbnail

✅ 파이썬은 한 문장 안에서 여러 값을 대입할 수 있는 언패킹이라는 특별한 문법을 제공한다.

언패킹 구문을 사용하면 한 문장 안에서 여러 값을 대입할 수 있다.

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]

언패킹을 사용하면 코드가 줄어들고 가독성이 훨씬 좋아진다.

✅ for루프를 사용할 때도 언패킹은 유용하다.

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}")

✍🏻반복문에서도 언패킹이 사용이 가능하다. 언패킹을 잘 사용하면 가독성 뿐만 코드 수를 보기 좋게 만들 수 있다.

🐤정리

  • 파이썬 언패킹은 일반화돼 있으므로 모든 이터러블에 적용할 수 있다. 그리고 이터러블이 여러 계층으로 내포된 경우에도 언패킹을 적용할 수 있다.
  • 인덱스를 사용해 시퀀스 내부에 접근하는 대신 언패킹을 사용해 시각적인 잡음을 줄이고 코드를 더 명확하게 만들라
profile
기술은 문제를 해결하기 위해 존재한다

0개의 댓글