def func():
if (condition_1):
if (condition_2):
if (condition_3):
# Code
else:
# Code
else:
# Code
else:
#Code
이런 식의 if문 중첩 코드를 본 적이 있고 초심자라면 누구나 한 번은 작성해 보았을 것이다.
하지만 이렇게 작성하면 가독성도 떨어질 뿐더러, 나중에 다시 보면 기억이 나지 않는다. 주석의 중요성
이런 경우에 사용하는 코드 최적화 기법은 아니지만, 유용했던 if문 one-liners 기법을 정리한다.
(위의 코드를 최적화하기 위해서는 not을 사용해서 코드를 정리해야 한다.)
이제 정리할 One-Liners 기법은 간단한 if문을 정리하는 방법이다.
if, if-else, if-elif-else의 경우에 따라 간단하게 정리했다.
(One-Liners 기법에는 if만 있지는 않다. comprehension 같은 것도 전부 One-Liners라고 부른다.)
# General Code
if a == 1:
print(a)
# One-line Code
if a == 1: print(a)
예외가 없는 단일 if문은 일반적인 방법이나 One-line이나 크게 차이가 없다.
마치 C에서 if문 단일 문장은 중괄호 { }를 사용하지 않고 바로 옆에 적는 것과 비슷한 느낌이다.
단지 저런 간단한 if를 여러 줄에 걸쳐 작성할 필요가 없다는 거다.
# General Code
if a == 1:
print(1)
else:
print(0)
# One-line Code: <결과> = A if <조건식> else B
print(1) if a == 1 else print(0)
"<결과> = A if <조건식> else B"라고 거창하게 적어놓았지만 이렇게까지 쓸 필요도 없다.
print(1) if a == 1 else print(0)
위의 코드를 읽어보자.
1을 출력해라, 만약 a가 1이라면, 아니라면 0을 출력해라.
너무나 자연스러운 읽기 방식 그대로 적용되었다. 차이점이라고는 if 뒤에 콜론(:)이 없다는 것.
주의할 점은 break, continue, pass, retrun과 같은 명령어를 사용하려면 One-line으로는 안 된다.
가령 break if a == 0 else continue라는 식이 있다고 가정해보자.
인터프리터가 break를 보는 순간 뒤의 코드는 해석하지 않고 곧바로 종료할 것이다.
이런 경우에는 여러 줄에 걸쳐서 작성해주자.
# General Code
a = -1
if a == 1:
print(1)
elif a == -1:
print(-1)
else:
print(0)
# One-line Code
a = -1
print(1) if a == 1 else print(-1) if a == -1 else print(0)
조건(elif) 개수가 많은 식이라면, 그리고 그냥 if-elif-else라면 일반적으로 적는 것이 가독성이 더 좋다.
개인적으로 if-else의 One-Line은 즐겨쓰지만, if-elif-else는 잘 사용하지는 않는다.
천천히 읽어보면 그렇게 어렵지 않다. 약간 Excel에서 다중 if문을 사용하는 느낌이 든다.
print(1) if a == 1 else print(-1) if a== -1 else print(0)
1을 출력해라, a가 1이라면, 아니면 -1을 출력해라 a가 -1이라면 그것도 아니라면 0을 출력해라.
elif가 사라지고 if else if else 형식으로 변한 것이 특징이다.
이런 One-line은 의미가 있나 싶다.
하지만 그건 내 생각이고 의미가 있기에 존재할 것이라 생각한다.
하지만 이러한 것도 있다하고 알아는 둬야 한다고 생각한다.
(실제로는 사용하지 않고, Code Refactoring할 때 사용할지도?)
'Computer Science > 파이썬(Python)' 카테고리의 다른 글
Python f string format (0) | 2023.04.01 |
---|---|
Python zip (0) | 2023.03.30 |
Python enumerate (0) | 2023.03.28 |
Python time module (0) | 2023.03.27 |
Python pass vs continue (0) | 2023.03.27 |