언패킹:패킹된 변수안의 값을 여러개의 변수값을 나눔
패킹:간단하게 변수하나에 여러개의 값을 담는 것
ex1) 자동차들이 출고 이후 몇년 지났는지 표현하는 리스트가 있다. 언패킹으로 진행해보자(가장 오래된 자동차, 두번째로 오래된 자동차)
car_ages = [0,9,3,8,7,20,19,1,6,15]
car_ages_descending = sorted(car_ages,reverse=True) #sorted(정렬),reverse=True(내림차순),False(오름차순)
oldest = car_ages_descending[0]
second_oldest= car_ages_descending[1]
others = car_ages_descending[2:]
print(oldest,second_oldest,others)
20 19 [15, 9, 8, 7, 6, 3, 1, 0]
:)원하는 값이 출력이 되었지만 여러 하위집합이 발생하게 되어 가독성이 떨어지고,실수가 발생할 수 있음
이를 위해 별표 식(*)을 이용해야 함
car_ages = [0,9,3,8,7,20,19,1,6,15]
car_ages_descending = sorted(car_ages,reverse=True) #sorted(정렬),reverse=True(내림차순),False(오름차순)
oldest, second_oldest, *others = car_ages_descending
print(oldest,second_oldest,others)
20 19 [15, 9, 8, 7, 6, 3, 1, 0]
:)가독성이 좋아지고, 인덱스의 경계가 사라지므로 오류발생률이 줄어듬
ex1-1 별표식을 다른 위치에도 쓰일 수 있음
*others,second_youngest,youngest = car_ages_descending. #20,19,15,9,8,7,6,3 먼저 출력 이후 1,0 출력
print(youngest,second_youngest,others)
0 1 [20, 19, 15, 9, 8, 7, 6, 3]
*별표식을 포함한 변수가 꼭 있어야함, 별표 식이 두개 이상 쓸 수 없음
ex2) car_inventory
car_inventory = { '시내':('그랜저','아반떼','티코'),'공항':('제네시스쿠페','소나타','k5','엑센트')}
((loc1,(best1,*rest1)),(loc2,(best2,*rest2))) = car_inventory.items() #dict 메서드 items 딕셔너리 키,값들을 불러옴
print(f'{loc1} 최고는 {best1},나머지는 {len(rest1)} 종') # loc1 =0 , best1 =1 , rest1= 나머지 수
print(f'{loc2} 최고는 {best2},나머지는 {len(rest2)} 종')
시내 최고는 그랜저,나머지는 2 종
공항 최고는 제네시스쿠페,나머지는 3 종
언패킹 대입에 별표 식을 사용하면 언패킹 패턴에서 대입되지 않는 모든 부분을 리스트에 잡아낼 수 있다