Python 변수 패킹, 언패킹

김유상·2022년 11월 21일
0

ICT인턴십

목록 보기
14/21

파이썬의 리스트 자료구조를 보면 슬라이싱과 같이 여러 개의 요소를 한번에 처리하는 작업을 쉽게 처리하는 기능을 제공한다. 변수 패킹, 언패킹 또한 슬라이싱과 같이 여러 요소들을 한번에 처리하는데 도움을 주는 기능이다.

def f(list):
    print(list[0])
    print(list[1])
    ...

위와 같은 코드는 list에 얼마나 원소가 존재하는지도 모르고 어떤 형태인지도 모르기 때문에 위험하다. 따라서 파이썬에서는 패킹, 언패킹을 사용한다.

def show(e, rest):
    print("element: {0} - rest: {1}".format(e, rest))

first, *rest = [1,2,3,4,5]
show(first, rest)

*rest, last = range(10)
show(rest, last)

first, last, *empty = [1,2]
print(first, last, empty)

이렇게 패킹, 언패킹을 이용하면 간단하게 하나씩 전달할 변수와 한번에 전달할 변수를 구분할 수 있고 요소가 없으면 빈 리스트를 반환하기 때문에 안전하기도 하다.

class User:
    def __init__(self, user_id, first_name, last_name):
        self.user_id = user_id
        self.first_name = first_name
        self.last_name = last_name

def users_from_rows(rows) -> list:
    return [
        User(user_id, first_name, last_name)
        for (user_id, first_name, last_name) in rows
    ]

rows = [[1,2,3], [4,5,6], [7,8,9]]
user_list = users_from_rows(rows)

이렇게 for문을 이용할 때 패킹, 언패킹을 사용하면 rows 내에 어떤 정보들이 들어있는지 자명한 변수 명을 통해 보여줄 수 있다.
확실히 rows[0], rows[1], rows[2]... 와 같이 쓰는 것보다 가독성이 좋아 보인다.

Referenced: 파이썬 클린코드 101p ~102p

profile
continuous programming

0개의 댓글