Published on

Python 바다코끼리 연산자(walrus operator) 에 대해서 알아보기

Authors

Python 3.8에서 도입된 바다코끼리 연산자(할당 표현식)는 := 기호를 사용하여 변수에 값을 할당하는 동시에 그 값을 반환하는 기능입니다.

PEP 572에서 제안(?)되었으며, 코드의 가독성과 효율성을 높이기 위해 고안되었다고 합니다.

1. 바다코끼리 연산자 활용처

표현식의 결과에 네이밍(이름을 지정하는 것)은 개발자로서 작업의 중요한 부분입니다.

기존에는 문장에서만 변수를 할당할 수 있었지만, 바다코끼리 연산자를 통해 표현식 내에서도 변수를 할당할 수 있게 되었습니다.

이는 특히 리스트 컴프리헨션, 조건문 등에서 중복 계산을 줄이고 코드의 가독성을 높이는 데 유용하게 작용할 수 있습니다.

아직 공부할때나 실무작업 할 때나 어느 블로그 글에서도 잘 본적은 없지만 알아두고 활용하면 좋을 것 같습니다.

2. 바다코끼리 연산자의 문법

바다코끼리 연산자의 기본 문법은 다음과 같습니다

variable := expression

이 문법은 변수에 값을 할당하고, 그 값을 바로 반환합니다.

조건문이 있을때,

변수 할당 + 조건 검사 를 동시에 할 수 있습니다.


if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

3. 문서 참고 PEP 572 (번역 및 해석)

PEP 572: 할당 표현식의 정의

주요 내용

  • PEP 572 작성자: Chris Angelico, Tim Peters, Guido van Rossum
  • 상태: 최종
  • 파이썬 버전: 3.8
  • 생성일: 2018년 2월 28일

이유 및 목적

할당 표현식을 도입한 주요 이유는 다음과 같습니다

  1. 가독성 향상: 중복된 계산을 줄이고 코드의 가독성을 높입니다.
  2. 재사용 가능성: 특정 패턴에서 임시 변수 사용을 가능하게 하여 코드의 효율성을 높입니다.
  3. 디버깅 편의성: 디버깅 시 표현식의 하위 부분에 이름을 지정하여 더 쉽게 분석할 수 있습니다.

조건문 기존 방식


result = []
for value in data:
    m = re.match(r'pattern', value)
    if m:
        result.append(m.group(1))

조건문 바다코끼리 연산자 사용 방식


result = [m.group(1) for value in data if (m := re.match(r'pattern', value))]

리스트 컴프리헨션 바다코끼리 연산자 사용

squares = [y := x**2 for x in range(10) if (y := x**2) > 5]

이 예제에서는 x의 제곱이 5보다 큰 경우에만 squares 리스트에 추가합니다.

문법 및 의미론

대부분의 문맥에서 임의의 파이썬 표현식을 사용할 수 있는 곳에서 NAME := expr 형태의 이름이 지정된 표현식을 사용할 수 있습니다.

이러한 이름이 지정된 표현식의 값은 포함된 표현식과 동일하며, 추가적인 부작용으로 대상에 해당 값이 할당됩니다.

예외적인 경우

  • 표현문 최상위 수준에서 괄호 없이 사용 불가
  • 함수 호출에서 키워드 인수 값으로 괄호 없이 사용 불가
  • 함수 기본값 최상위 수준에서 사용 불가
  • 람다 함수에서 사용 불가
  • f-문자열 내부에서는 사용 불가

참고 자료

hongreat 블로그의 글을 봐주셔서 감사합니다!