조건문과 반복문이 반복되면 가독성이 떨어지고, 실수할 상황이 발생합니다. 이런 문제를 해결하기 위해 조건문과 반복문에서 할 수 있는 몇 가지 팁을 공유합니다.
2-1. 조건문
함수의 설계에서 조건문은 다음과 같은 방법으로 쓸 수 있습니다.
def process():
if state :
return True
else :
return False
이 방식을 다르게 쓰면 다음과 같습니다.
def process():
if state : return True
return False
if문 등을 통해서 이미 return을 했다면, elif
나 else
를 굳이 사용하지 않아도 됩니다.
함수를 설계하며 가장 중요한 점은 return
을 하는 순간 함수의 생명은 끝이라는 것입니다.
이런 return의 특징 때문에 함수 종료를 위해 return을 사용하는 경우도 있습니다. 굳이 이미 끝난 함수의 반복문이나 남은 프로세스를 break
등으로 끊지 않아도 탈출할 수 있다는 것입니다.
그 다음은 3항 연산자를 사용하는 방법이 있습니다. C++에서는 state?True:False
와 같은 간결한 표현으로 작성되고, python은 좀 더 직관적입니다.
def process():
return True if state else False
조건문이 참일 때는 앞의 항을 선택하고, 거짓이면 뒤의 항을 선택합니다. 같은 함수의 표현식이지만 간결한 정도가 다른 것을 알 수 있습니다.
조건문도 여러가지 트릭을 사용하면 쉽게 풀 수 있는 문제가 많습니다. 다음 문제를 풀어보며 왜 clean code가 필요한지 살펴봅시다.
그리고 파이썬의 비교연산은 연속으로 할 수 있습니다. 이를 꼭 잘 활용하도록 합시다.
print(1 < 2 and 2 < 3)
print(1 < 2 < 3)
2-2. 반복문
N by N, 즉 2중 반복문을 돌릴 때의 코드는 다음과 같습니다.
for i in range(N):
for j in range(N):
pass
코드의 indent가 적당히 존재하는 경우, 가독성이 뛰어나지만 indent가 3, 4, 5개 늘어나는 순간부터 가독성은 매우 떨어집니다. 이런 경우, 시간에 엄청 큰 영향은 받지 않고 다음과 같은 과정을 거칠 수 있습니다.
for ij in range(N*N):
i, j = ij//N, ij%N
pass
i, j가 늘어나고 줄어드는 주기를 사용하면 위의 방식처럼 사용할 수 있습니다. 많이 사용하는 트릭은 아니지만 알아두면 좋습니다.
(나중에는 from itertools import product
로 더 좋게 사용할 수 있습니다.)
또한 반복문과 조건문이 있을 때는 가독성이 떨어지기 쉽습니다. 예를 들면 다음과 같은 상황이 있습니다.
for i in range(N):
if state :
process()
이렇게 반복문과 조건문이 함께가 되는 경우, indent가 계속 늘어날 수 있습니다. 이런 경우에는 조금 바꿔 생각하면 다음과 같이 작성할 수 있습니다.
for i in range(N):
if not state : continue
process()
조건문이 참일 때 실행하라가 아닌 조건문이 거짓이면 넘어가라 라고 바꾼 것입니다.