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