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)

주의사항

과도하게 사용하면 오히려 가독성이 떨어진다. 특히 복잡한 표현식 안에 중첩해서 쓰는 건 피했다. 코드 리뷰에서 팀원들이 익숙하지 않아 설명이 필요한 경우도 있었다.

간단한 조건문이나 반복문에서 임시 변수를 줄일 때만 제한적으로 사용하는 게 좋았다.

Python 3.8 assignment expression으로 반복 코드 줄이기