- Published on
Python 바다코끼리 연산자(walrus operator) 에 대해서 알아보기
- Authors
- Name
- hongreat
- ✉️hongreat95@gmail.com
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일
이유 및 목적
할당 표현식을 도입한 주요 이유는 다음과 같습니다
- 가독성 향상: 중복된 계산을 줄이고 코드의 가독성을 높입니다.
- 재사용 가능성: 특정 패턴에서 임시 변수 사용을 가능하게 하여 코드의 효율성을 높입니다.
- 디버깅 편의성: 디버깅 시 표현식의 하위 부분에 이름을 지정하여 더 쉽게 분석할 수 있습니다.
조건문 기존 방식
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-문자열 내부에서는 사용 불가