python 3.8 version에 새로운 연산자가 추가되었다. 이름은 바다코끼리 연산자가 아니고 정식 명칭은 assignment expression이다. 공홈에서는 다음과 같이 소개하고 있다.
There is new syntax := that assigns values to variables as part of a larger expression.
It is affectionately known as “the walrus operator” due to its resemblance to the eyes and tusks of a walrus.
(click here for more info!) > 📑
그렇다. 공홈에서 바다코끼리 연산자라고 얘기하고 있으니 지금부터 이녀석을 바다코끼리라고 칭하겠다. 지금부터 이 연산자를 이해해보자!
파이썬에서 변수에 값을 선언할 때 다음과 같은 흐름을 따른다.
=
을 기준으로
1. 왼쪽에는 변수(variable)
2. 오른쪽에는 값(value)을
3. 표현(expression)함으로써 변수에 값을
4. 할당(assignment)한다.
코드로 보면 다음과 같다.
from datetime import datetime
start = datetime.now()
그렇다면 바다코끼리는 어떤 역할을 하길래 "더 큰 표현식"으로써 변수에 값을 할당한다는 애매하고도 이해하기 어려운 말을 하는걸까?
파이썬은 if
문의 condition expression 내에서 새로운 변수를 선언할 수 없다.
a = "안녕하세요"
if (n = len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
위와 같이 코딩하면 무조건 SyntaxError: invalid syntax
를 조우하게 될 것이다. 일반적인 경우 case1처럼 condition expression 밖에서 먼저 변수를 선언하고 조건문에 활용한다. 하지만 case2와 같이 n이라는 변수를 condition expression 안에서 선언하고 또 if
문 내에서 사용할 수 있게 만들어주는 녀석이 바로 바다코끼리이다.
a = "안녕하세요 저는 johnywhisky입니다"
# case 1
n = len(a)
if n > 10:
print(f"List is too long ({n} elements, expected <= 10)")
# case 2
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
# case1과 2는 동일한 결과를 보여준다.
콜론 하나만 추가하면 실행 가능한 코드가 된다는 뜻이다.
a = "안녕하세요"
if (n := len(a)) > 10:
print(sentence := f"List is too long ({n} elements, expected <= 10)")
print(n)
# 결과 = 5
조건을 만족하지 않기 때문에 if
문 안의 print는 실행되지 않았지만 if문 밖에서 n의 값을 확인할 수 있다. 그리고 if
의 condition expression 안에서만 사용할 수 있는것이 아니다.
a = "안녕하세요 저는 johnywhisky입니다"
if (n := len(a)) > 10:
print(sentence := f"List is too short ({n} elements, expected >= 10)")
print(n, sentence)
이처럼 print
문 안에서 사용해 if
문 밖에서도 활용할 수 있다. 즉, 이전에는 변수를 선언 할 수 없는 상황에서 할 수 있게 만들어주는 녀석이 바다코끼리 연산자이다.
room_contants = [{
"deposit" : float((sale_info := room.sale_info.first()).deposit),
"monthly_pay" : float(sale_info.monthly_pay),
"sale_type" : sale_info.sale_type.name,
} for room in room_list]
이런식으로 list comprehension 안에서 dict type의 element를 표현할 때도 사용할 수 있다.
Assignment expression을 정리하자면 다음과 같다.
:=
을 기준으로
1. 왼쪽에 있는 변수(variable)에
2. 오른쪽의 표현(expression)을
3. 값(value)으로써
4. 할당(assignment)함과 동시에
5. 표현(expression)으로써의 기능을 수행하게 해준다.