파이썬 왈러스 연산자 소개(필요성, 사용 예시)

파이썬 왈러스 연산자 소개(필요성, 사용 예시)

이번 글에서는 왈러스 연산자에 대해 알아보겠습니다.

왈러스 연산자는 아무래도 새로운 기능을 위한 개념이라기 보다는 짧고 직관적인 코드 작성에 사용되는 개념이다보니 직접 예제를 보며 설명하겠습니다.


왈러스 연산자는 비교적 최근인 3.8 버전에서 등장한 개념입니다.

한 줄에서 변수에 값을 할당하면서 동시에 이 값을 표현식의 일부로 사용할 수 있습니다.

바다코끼리 연산자를 통해 파이썬에서 할당 표현식을 가능하게 합니다.

여러분이 오랜만에 소비를 좀 하려고 합니다. 우선 그래픽 카드도 좀 사고 싶고,,, 그 다음 순위로 책(2권 사야됨), 그 다음 순위로 키보드, 그 다음 순위로 만년필을 선호한다고 가정하겠습니다.

이제 온라인 쇼핑몰 속을 돌아다니며 현재 예산에서 무엇을 살 수 있을 지 봅니다!

예산 내에서 그래픽 카드를 살 수 있으면 사고, 아니면 책 2권 값을 낼 수 있는 지 확인합니다. 그래도 안 되면 순서대로 키보드, 만년필을 살 수 있는지 확인해야 합니다.

능숙한 프로그래머인 여러분들은 이정도는 파이썬으로 자동화하실 수 있죠?

my_budget = 1000000
gift_value = {
    # 그래픽 카드는 품절이랍니다 'gc': 1300000,
    'book': 50000,
    'keyboard': 55000,
    'pen': 80000
}

# 99999999 정도면 품절 상품도 구매할 수 있다고 칩시다.
value = gift_value.get('gc', 99999999)
if value <= my_budget:
    print('그래픽카드 구매')
else:
    value = gift_value.get('book', 99999999)
    if value*2 <= my_budget:
        print('책 주문!')
    else:
        value = gift_value.get('keyboard', 99999999)
        if value <= my_budget:
            print('키보드 구매')
        else:
            value = gift_value.get('pen', 99999999)
            if value <= my_budget:
                print('만년필 구매')
            else:
                print('살 수 있는 게 없습니다.')
print(f'{my_budget}에서 {value}만큼 사용하셨습니다.')

의도대로 동작하지만;; 너무 복잡해보이는 코드입니다. 제가 코드를 잘못 짰다고요?

elif 사용을 통해 직관적으로 보이게 만들 수 있지만, 그렇게 쉽게 줄여지지 않습니다. 항상 동일 환경 조건에서 비교를 하는 것이 아니며(book 같은 경우에는 *2 후 비교) 각 상품마다 나오는 메시지가 다르기 때문입니다.

이제 왈러스 연산자가 나올 시간입니다. 이 코드에 왈러스 연산자를 적용해보겠습니다.

my_budget = 1000000
gift_value = {
    # 그래픽 카드는 품절이랍니다 'gc': 1300000,
    'book': 50000,
    'keyboard': 55000,
    'pen': 80000
}

if (value := gift_value.get('gc', 99999999)) <= my_budget:
    print('그래픽카드 구매')
elif (value := gift_value.get('book', 99999999) * 2) <= my_budget:
    print('책 주문!')
elif (value := gift_value.get('keyboard', 99999999)) <= my_budget:
    print('키보드 구매')
elif (value := gift_value.get('pen', 99999999)) <= my_budget:
    print('만년필 구매')
else:
    print('살 수 있는 게 없습니다.')

print(f'{my_budget}에서 {value}만큼 사용하셨습니다')

위아래 코드의 차이가 잘 느껴지셨으면 좋겠습니다.

지금 본 사례처럼 왈러스 연산자를 사용하면 코드를 더 직관적이게 만들 수 있습니다.

조건문 내에서 값을 할당하고 바로 검사, 블록 안밖에서 사용까지 할 수 있으니 정말 편리하다고 느낍니다.

다른 사용 예시를 보며 마무리하겠습니다.

# 입력값을 받아서 검사하고 처리
if (n := int(input("Enter a number: "))) > 10:
    print("10보다 큰 수를 입력했군")
# 튜플 언패킹을 사용한 예
a, b = (1, 2)
print(a, b)  # 출력: 1 2
# 튜플 타입에서 왈러스 연산자를 사용하려면 반드시 명시적으로 괄호를 해주거나 따로 언패킹, 패킹해야 됩니다.
(a := 1, b := 2)
print(a, b)  # 출력: 1 2

원문: https://pinstella.com/writer/articles/7

댓글을 작성해보세요.