😎 파이썬 3.8 버전부터 walrus operator (바다코끼리 연산) 이 추가되었다. 이에 대해 알아보자.
python 3.8 버전부터 walrus operator(바다코끼리 연산) 이 추가되었다. 정식명칭은 대입 표현식(Assignment Expression) 이지만 작성법(:=) 의 모양이 바다코끼리의 눈과 엄니와 비슷하여 이렇게 명명한것 같다.
변수 := 표현식
식의 결과를 변수에 할당함과 동시에 반환한다. 예를들여 변수에 표현식을 대입함과 동시에 식의 검사도 같이 진행된다.
변수의 할당과 반환의 동시에 함으로 코드량을 줄이고 직관적으로 코드를 작성할 수 있게된다.
바다코끼리 연산자의 목적은 표현식에 이름을 부여하고 재사용할 수 있도록 하는 것이 목적이다.
이전의 파이썬에서는 표현식을 바로 캡쳐하는 문법은 없었다. 가령 예를 들어 입력값이 0이아닐경우 반복하는 식이있다고 가정해보자
n = input()
while True:
if n==0:
break
n = input()
기존의 파이썬은 이런식으로 같은 문장이 한번 더나오거나 검사식을 대입하는 방법이없었다.
이를 바다코끼리 연산과 같이 작성해본다면 다음과 같이 표현할수 있다.
while (n:=input())!=0:
# your func
#혹은
while n:input():
#your func
# n 이 0일경우 while 조건이 False 이기에 이런식으로 축약할수 있음
위와 같이 코드를 줄일 수 있을뿐 더러 더욱 직관적으로 표현할수 있다. 😎
다음 예제는 백준 문제인 너의 평점은 문제의 제출 코드이다.
이문제 에서는 다수의 반복적인 input이 발생하고 이 input값을 저장할 필요도 있었기에 바다 코끼리 연산을 이용해 다음과 같이 작성할수 있었다.
# 너의 평점은
import sys
input = sys.stdin.readline
score_dict = {
"A+": 4.5,
"A0": 4.0,
"B+": 3.5,
"B0": 3.0,
"C+": 2.5,
"C0": 2.0,
"D+": 1.5,
"D0": 1.0,
"F": 0.0
}
s_score = 0.0
count_subject = 0
while v := input().split():
subject, score, grade = v
if grade == 'P':
continue
s_score += float(score) * score_dict[grade]
count_subject += float(score)
print(f'{round(s_score/count_subject,6)}')
좋은 문법이네요.