[python3] unpacking(*과 **)

손소·2023년 3월 5일
0

Python

목록 보기
3/6

기본 unpacking

a, b, c = [1, 2, 3] # 리스트

print(a) # 1
print(b) # 2
print(c) # 3
  • tuple, string, dict 등 모든 iterable 형태의 자료형은 다 가능

*을 사용한 unpacking

  1. *가 왼쪽 변수에 있을 경우
a, *b, c = [1, 2, 3, 4, 5]

print(a) # 1
print(b) # [2, 3, 4]
print(c) # 5

a, b, *c = [1, 2, 3, 4, 5]

print(a) # 1
print(b) # 2
print(c) # [3, 4, 5]
  • 무조건 리스트 형태로 반환됨
  • 왼쪽에 *는 한 번만 사용 가능! → 두 번 이상 사용 시 SyntaxError

컨테이너 그 자체를 unpacking하는 *

l1 = [1, 2, 3]

print(*l1) # 1 2 3

# 새로운 리스트에 합칠 수 있음
l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = [*l1, *l2]

print(l3) # [1, 2, 3, 4, 5, 6]
  • 다른 자료형끼리도 합쳐서 리스트 만들 수 있음
l1 = [1, 2, 3]
l2 = 'XYZ'
l3 = (*l1, *l2)

print(l3) #(1, 2, 3, 'X', 'Y', 'Z')
  • 튜플이나 리스트로 싸지 않고 unpacking 불가
l1 = [1, 2, 3]
l2 = *l1

print(l2) # SyntaxError: can't use starred expression here

**을 사용한 unpacking

key와 value를 한꺼번에 보기 위해 사용

d1 = {'p': 1, 'y': 2}
d2 = {'t': 3, 'h': 4}
d3 = {'h': 5, 'o': 6, 'n': 7}

d = {**d1, **d2, **d3}

print(d) # {'p': 1, 'y': 2, 't': 3, 'h': 5, 'o': 6, 'n': 7}
  • 같은 key가 있으면 뒤에 있는 게 override함

nested unpacking

a, b, (c, d) = [1, 2, [3, 4]]

print(a) # 1
print(b) # 2
print(c) # 3
print(d) # 4

0개의 댓글