- [BW 29] 대입식을 사용해 컴프리헨션 안에서 반복 작업을 피하라2024년 10월 29일
- 31514
- 작성자
- 2024.10.29.:41
회사에서 주문을 관리하기 위한 프로그램을 작성한다고 하자.
고객의 주문 요청이 재고 수량을 넘지 않아야 한다.
stock = { '못': 125, '나사못': 35, '나비너트': 8, '와셔': 24, } order = ['나사못', '나비너트', '클립'] def get_batches(count, size): return count // size result = {} for name in order: count = stock.get(name, 0) batches = get_batches(count, 8) if batches: result[name] = batches print(result) >>> {'나사못': 4, '나비너트': 1}
위 코드를 컴프리헨션으로 바꾸면 다음과 같다.
found = {name: get_batches(stock.get(name, 0), 8) for name in order if get_batches(stock.get(name, 0), 8)} print(found) >>> {'나사못': 4, '나비너트': 1}
하지만 get_batches(stock.get(name, 0), 8)이 반복된다는 단점이 있다.
이때, 왈러스 연산자(:=)를 사용하여 대입식을 만들면 가독성과 성능이 좋아진다.
found = {name: batches for name in order if (batches := get_batches(stock.get(name, 0), 8))} print(found) >>> {'나사못': 4, '나비너트': 1}
'Book > 파이썬 코딩의 기술' 카테고리의 다른 글
[BW 31] 인자에 대해 이터레이션할 때는 방어적이 돼라 (1) 2024.10.31 [BW 30] 리스트를 반환하기보다는 제너레이터를 사용하라 (2) 2024.10.30 [BW 28] 컴프리헨션 내부에 제어 하위 식을 세 개 이상 사용하지 말라 (0) 2024.10.28 [BW 27] map과 filter 대신 컴프리헨션을 사용하라 (0) 2024.10.28 [BW 26] functools.wrap을 사용해 함수 데코레이터를 정의하라 (0) 2024.10.25 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)