'Better way 10. 대입식을 사용해 반복을 피하라' 정리

Effective Python 2nd 파이썬 코딩의 기술 (교보문고 링크)을 제대로 이해하고자 블로그에 정리합니다. 혹 누군가에게도 도움이 되기를 바랍니다.



현재 위치

Note
<1. Pythonic Thinking>
Item 10: Prevent Repetition with Assignment Expressions
Better way 10. 대입식을 사용해 반복을 피하라



if문이나 while문 등의 조건식에 왈러스 연산자:=를 활용하면 코드 중복을 없앨 수 있습니다.
표현식 안에 쓰여서 대입 후 실제 평가가 이루어 집니다.

‘왈러스’라는 이름은 연산자가 바다코끼리(walrus)의 눈과 어금니처럼 생겨서 붙여졌다고 합니다.

walrus



a = [10, 2 , 34, 4, 5, 1]

if n := len(a):  # 변수 'n' 정의 및 대입. 이 후 if 조건 평가
    print(f'List has {n} elements.')  # 블록 안에서도 계산된 'n' 사용

print(f'outside. n: {n}')  # `n` 은 여기서도 유효함. (if 바로 앞 줄에서 n 을 대입한 것과 같은 결과)

>>>
List has 6 elements.
outside. n: 6

if 조건식 안에서 대입식 사용


if (n := len(a)) > 10:  # 변수 'n' 정의 및 대입. 이 후 if 조건 평가
    print(f"List is too long ({n} elements, expected <= 10)")

더 큰 표현식의 일부라면 괄호로 감싸야 함. (:=의 연산자 우선순위가 부등호 등보다 낮음)



책에서 챕터 마지막 부분에 적혀있는 내용입니다.

Tip
Assignment expressions use the walrus operator (:=) to both assign and evaluate variable names in a single expression, thus reducing repetition.
대입식에서는 왈러스 연산자(:=)를 사용해 하나의 식 안에서 변수 이름에 값을 대입하면서 이 값을 평가할 수 있고, 중복을 줄일 수 있다.
Tip
When an assignment expression is a subexpression of a larger expression, it must be surrounded with parentheses.
대입식이 더 큰 식의 일부분으로 쓰일 때는 괄로로 둘러싸야 한다.
Tip
Although switch/case statements and do/while loops are not available in Python, their functionality can be emulated much more clearly by using assignment expressions.
파이썬에서는 switch/case 문이나 do/while 루프를 쓸 수 없지만, 대입식을 사용하면 이런 기능을 더 깔끔하게 흉내 낼 수 있다.


# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)

while 문의 조건식 안에서 대입식 사용


fresh_fruit = {
    '사과': 10,
    '바나나': 8,
    '레몬': 5,
}

if (count := fresh_fruit.get('바나나', 0)) >= 2:
    pieces = slice_bananas(count)
    to_enjoy = make_smoothies(pieces)
elif (count := fresh_fruit.get('사과', 0)) >= 4:
    to_enjoy = make_cider(count)
elif count := fresh_fruit.get('레몬', 0):
    to_enjoy = make_lemonade(count)
else:
    to_enjoy = '아무것도 없음'

파이썬에는 없는 switch/case 느낌으로 사용



Related Content