[파이썬에서 살아남는법 제 9장] 대입식을 사용해 반복을 피하라

2023. 1. 18. 14:12DL Study

※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다.

 

대입식은 왈러스 연산자(Walrus operatior) 라고 부른다. 

이대입식은 파이썬 3.8 에서 나왔고 코드의 중복문제를 해결해준다.

일반문 a = b

왈러스 a := b 라고 하면 a 왈러스 b 라고 한다.

 

fresh_fruit = {
	'apple': 10,
	'banana': 8,
	'lemon': 5,
}
def make_lemonade(count):
	return print("레몬의 갯수는 %s" %count)
def out_of_stock():
	print("없엉")
count = fresh_fruit.get('lemon', 0) # 일방적인 딕셔너리에서 key 값 출력 or 없는값이면 0

if count: # 이후 값을 통해 연산
	make_lemonade(count)
else:
	out_of_stock()

일방적인 레몬의 갯수를 받아드려 0인지 검사하는 코드이다. count 가 여러번 있어서 가시적으로 보기 안좋다.

if count := fresh_fruit.get('lemon', 0):
	make_lemonade(count)
else:
	out_of_stock()

왈러스 연산자를 통해 한줄로 바꿀수 있다.

 

조건문 역시 사용이 가능하다. 

if (count := fresh_fruit.get('apple', 0)) >= 4:
	make_cider(count)
else:
	out_of_stock()

대입식을 괄호로 둘러싸는것을 잊지 마라

count = fresh_fruit.get('banana', 0)
if count >= 2:
	pieces = slice_bananas(count)
	to_enjoy = make_smoothies(pieces)
else:
	count = fresh_fruit.get('apple', 0)
	if count >= 4:
		to_enjoy = make_cider(count)
	else:
		count = fresh_fruit.get('lemon', 0)
		if count:
			to_enjoy = make_lemonade(count)
		else:
			to_enjoy‘= 'Nothing'

위와 같이 지저분한 식을 

if (count := fresh_fruit.get('banana', 0)) >= 2:
	pieces = slice_bananas(count)
	to_enjoy = make_smoothies(pieces)
elif (count := fresh_fruit.get('apple', 0)) >= 4:
	to_enjoy = make_cider(count)
elif count := fresh_fruit.get('lemon', 0):
	to_enjoy = make_lemonade(count)
else:
	to_enjoy = 'Nothing'

이렇게 간단하게 나타낼수 있다. 

또한 While 루프에서는 루프를 마치는 방식으로 조건을 줄수도 있다. 

bottles = []
while fresh_fruit := pick_fruit():
	for fruit, count in fresh_fruit.items():
		batch = make_juice(fruit, count)
		bottles.extend(batch)

단순히 While True: 를 사용한다면 루프를 마치는 함수를 추가적으로 넣어주어야 한다. 하지만 윌러스 문을 통해 본 문제를 해결할수 있다.