[Effective Python] | August 29, 2020
Effective Python: Second Edition 내용 정리
a = b
는 ‘a equals b’ 라고 읽는데, a := b
라고 쓰고 ‘a walrus b’ 라고 읽는다.if statement와 같이 assignment statement가 사용될 수 없는 곳에서 assign(변수 할당)이 가능하도록 해준다.
# assignment expresstion을 사용하지 않았을 때
fruit = {
'apple': 5,
'banana': 10,
'lemon': 2
}
count = fruit.get('lemon', 0)
if count:
print(count)
else:
print('out of stock')
# assignment expresstion을 사용했을 때
fruit = {
'apple': 5,
'banana': 10,
'lemon': 2
}
if count := fruit.get('lemon', 0):
print(count)
else:
print('out of stock')
만약, assignment expression이 더 큰 표현식의 subexpression이라면, 괄호를 꼭 붙여줘야한다.
if (count := fruit.get('lemon', 0)) >= 4:
print(count)
else:
print('need more fruits')
while문
에서 while이 돌 때마다 새로 변수를 정의해줘야 하는 경우:
alp = ['A', 'B', 'C', 'D', 'E']
def pick_alp():
if alp:
return alp.pop(0)
else:
return []
picked_alp = pick_alp()
while picked_alp:
print(picked_alp)
picked_alp = pick_alp()
➡ picked_alp = pick_alp()
가 while문 밖에서 처음 정의되었는데, while문이 돌 때마다 새로 정의를 해줘야하기 때문에 while의 마지막 줄에도 또 적어줬다. 중복의 발생.
alp = ['A', 'B', 'C', 'D', 'E']
def pick_alp():
if alp:
return alp.pop(0)
else:
return []
while True:
picked_alp = pick_alp()
if not picked_alp:
break
print(picked_alp)
➡ 중복된 문장은 없지만, while문을 무한 루프로 만들면서 while loop의 기능을 저해한다.
alp = ['A', 'B', 'C', 'D', 'E']
def pick_alp():
if alp:
return alp.pop(0)
else:
return []
while picked_alp := pick_alp():
print(picked_alp)
➡ :=
가 매번 다시 할당을 시켜주면서 while문도 계산해서 실행시켜준다.
➡ Assignment expression을 사용하면, 반복을 없앨 수 있다.