Effective Python C1. Pythonic(6) - 대입을 사용한 언패킹

2 분 소요

Introduction

인덱싱을 이용해 데이터에 접근하는 대신, 언패킹을 이용하면 시각적 잡음이 적다.

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

파이썬 언패킹 구문을 이용한 한 문장 안에서 여러 값을 대입할 수 있다.

data = ["rain", 25, 45] 

# 인덱싱을 이용한 방법
weather = data[0]
temperature = data[1]
PM10 = data[2]

# 언패킹을 이용한 방법
weather, temperature, PM10 = data

리스트, 시퀀스 등 이터러블한 객체의 경우 다양한 패턴을 언패킹 구문에 사용할 수 있다. 또는 다음과 같이 SWAP을 이용한 정렬도 가능하다.

def bubble_sort(a):
    for _ in range(len(a)):
        for i in range(1, len(a)):
            if a[i] < a[i-1]:
                a[i-1], a[i] = a[i], a[i-1]
values = [5, 4, 1, 3, 7, 8, 2]
bubble_sort(values)
print(values)

위는 버블소트 함수에서 두 원소를 교체하는 식에서 언패킹이 쓰였다. 과정은 다음과 같다.

  1. 대입문의 우항인 a[1], a[i-1]이 계산된다.
  2. 이름이 없는 새로운 tuple에 저장된다.
  3. 대입문의 좌항에 있는 언패킹 패턴 a[i-1], a[i]로 임시 tuple의 값이 각 변수에 저장된다.

Discussion

언패킹을 잘 이용하면 몇 줄의 코드를 한 줄로 줄일 수 있어 가독성을 높일 수 있다. 또한 swap은 딥러닝 프레임워크에서도 많이 쓰이니 유연하게 사용할 수 있도록 경험치를 쌓아두자.

Summary

  • 파이썬 언패킹은 일반화되어 있으므로 모든 이터러블에 적용할 수 있다.
  • 인덱싱을 사용해 시퀀스 내부에 접근하지 말고 언패킹을 이용해 코드를 더 명확하게 만들라.

Reference

파이썬 코딩의 기술 제 2판. - 브렛 슬리킨 지음 / 오현석 옮김