[파이썬에서 살아남는법 제 9장] 대입식을 사용해 반복을 피하라
2023. 1. 18. 14:12ㆍDL 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: 를 사용한다면 루프를 마치는 함수를 추가적으로 넣어주어야 한다. 하지만 윌러스 문을 통해 본 문제를 해결할수 있다.
'DL Study' 카테고리의 다른 글
[파이썬에서 살아남는법 제 10장] 시퀀스를 슬라이싱하는 방법을 익혀라 (0) | 2023.02.13 |
---|---|
[밑바닥 부터 시작하는 딥러닝] 6장 학습 관련 기술들 (0) | 2023.01.31 |
[밑바닥 부터 시작하는 딥러닝] 5장 Backpropagation (0) | 2023.01.18 |
[파이썬에서 살아남는법 제 8장] for나 while 루프 뒤에 else 블록을 사용하지 말라 (0) | 2023.01.17 |
[파이썬에서 살아남는법 제 7장] 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip 을 사용하라 (0) | 2023.01.17 |