왈러스 연산자

honeybeeveloper·2022년 10월 2일
0

python 3.8부터 도입된 왈러스 연산자(대입연산자)에 대해 알아보자.

walrus operator

왈러스 연산자를 사용하면 하나의 식 안에서 변수 이름에 값을 대입하면서 이 값을 평가할 수 있다.
대입문이 쓰일 수 없는 위치(if, while...) 에서 변수에 값을 대입할 수 있는 유용한 문법이다.

예를 들어 카페에서 사용할 과일 바구니를 관리한다고 하자.

# python3.8

# 과일 바구니의 내용물
fruits = {
    'apple': 10,
    'banana': 15,
    'lemon': 5
}

# 레모네이드 제조
def make_lemonade(count):
	pass
    
# 사과주스 제조
def make_apple_juice(count):
    pass
    
def slice_banana(count):
    return pieces

# 스무디 제조
def make_smoothies(pieces):
    pass
    
# 재고 없음
def out_of_stock():
    pass

기존에 쉽게 생각할 수 있는 코드

lemon_count = fruits.get('lemon', 0)
if lemon_count:
    make_lemonade(lemon_count)
else:
    out_of_stock()

이 코드의 문제는 lemon_count 변수는 if문의 첫 번째 블록에서만 쓰이는데 if 앞에서 변수를 정의하면서 필요이상으로 중요해 보인다.

왈러스 연산자를 사용하면 다음과 같이 코드를 작성할 수 있다.

# 왈러스 연산자를 이용한 대입 후 평가
if lemon_count := fruits.get('lemon', 0):
    make_lemonade(lemon_count)
else:
    out_of_stock()

if 조건문에서 대입 및 비교 수행

if (apple_count := fruits.get('apple', 0)) > 2:
    make_apple_juice(apple_count)
else:
    out_of_stock()

또 다른 예제 (스무디, 사과주스, 레모네이드 제조)

count = fruits.get('banana', 0)
if count >= 2:
    pieces = slice_banana(count)
    make_smoothies(pieces)
else:
    apple_count = fruits.get('apple', 0)
    if apple_count > 2:
        make_apple_juice(apple_count)
    else:
        lemon_count = fruits.get('lemon', 0)
        if lemon_count:
            make_lemonade(lemon_count)
        else:
            out_of_stock()

왈러스 연산자를 사용한다면...

if (count := fruits.get('banana', 0)) >= 2:
    pieces = slice_banana(count)
    make_smoothies(pieces)
elif (apple_count := fruits.get('apple', 0)) > 2:
    make_apple_juice(apple_count)
elif lemon_count := fruits.get('lemon', 0):
    make_lemonade(lemon_count)
else:
    out_of_stock()





참고 : 책 <파이썬 코딩의 기술>

profile
꿀벌같은 개발자가 되고 싶습니다.

0개의 댓글