Python 3.8 assignment expression으로 반복 코드 줄이기
배경
프로젝트에서 Python 3.8로 업그레이드하면서 assignment expression(일명 walrus operator)을 실무에 적용해봤다. 기존 코드에서 같은 함수를 여러 번 호출하거나 임시 변수를 남발하는 패턴이 많았는데, 이를 개선할 수 있었다.
개선 사례
1. 정규표현식 매칭
기존 코드는 match 결과를 두 번 사용했다.
# Before
import re
if re.search(r'(\d+)', text):
match = re.search(r'(\d+)', text)
return match.group(1)
# After
if match := re.search(r'(\d+)', text):
return match.group(1)
2. API 응답 처리
외부 API 호출 결과를 검증하는 코드가 깔끔해졌다.
# Before
response = fetch_user_data(user_id)
if response and response.get('status') == 'active':
process_user(response)
# After
if (data := fetch_user_data(user_id)) and data.get('status') == 'active':
process_user(data)
3. while 루프 최적화
파일이나 스트림 읽기에서 특히 유용했다.
# Before
line = file.readline()
while line:
process(line)
line = file.readline()
# After
while line := file.readline():
process(line)
주의사항
과도하게 사용하면 오히려 가독성이 떨어진다. 특히 복잡한 표현식 안에 중첩해서 쓰는 건 피했다. 코드 리뷰에서 팀원들이 익숙하지 않아 설명이 필요한 경우도 있었다.
간단한 조건문이나 반복문에서 임시 변수를 줄일 때만 제한적으로 사용하는 게 좋았다.