많은 프로그래밍 언어는 조건 표현식(conditional expression)을 정의하는 삼항 연산자(ternary operator)를 지원합니다.
Python의 삼항 연산자 역시 이진 조건(binary condition)의 평가 결과에 따라 값을 반환하는 데 사용됩니다. 조건을 입력으로 받기 때문에 겉보기에는 "if-else" 조건문 블록과 비슷하지만, 결과값을 반환한다는 점에서 함수처럼 동작합니다.
기본 문법
[on_true] if [expression] else [on_false]
두 개의 정수를 비교하는 간단한 프로그램을 작성해 보겠습니다.
a. Python if-else 문 사용
>>> x, y = 5, 6
>>> if x>y:
print("x")
else:
print("y")
y
b. 삼항 연산자 사용
>>> x, y = 5, 6
>>> print("x" if x> y else "y")
y
삼항 연산자를 사용하면 코드를 단 한 줄로 작성할 수 있습니다. Python은 먼저 조건을 평가하고, 조건이 참(True)이면 첫 번째 표현식을, 거짓(False)이면 두 번째 표현식을 평가합니다.
>>> def find_max(a,b):
return a if (a>b) else b
>>> find_max(5, 6)
6
삼항 연산자를 구현하는 다양한 방법
Python에서는 삼항 연산자를 여러 가지 방식으로 구현할 수 있습니다.
a. Python 튜플(Tuple) 활용
>>> a, b = random(), random()
>>> (b, a) [a>b]
0.5497848117028667
위 코드는 아래 코드와 동일하게 동작합니다.
>>> (b, a) [True]
0.5065247098746795
반환된 값이 'a'인지 'b'인지 헷갈릴 수 있으므로, 위 코드를 다음과 같이 다시 작성하면 어떤 값이 선택되었는지 명확하게 확인할 수 있습니다.
>>> (f"b:{b}", f"a:{a}") [a>b]
'b:0.5497848117028667'b. Python 딕셔너리(Dictionary) 활용
>>> a, b = random(), random()
>>> {False: f"b:{b}", True: f"a:{a}"}[a>b]
'a:0.8089581560973976'
키-값 쌍의 순서를 바꾸어 작성할 수도 있습니다.
>>> {True: f"a:{a}", False: f"b:{b}"}[a>b]
'a:0.8089581560973976'c. 람다(Lambda) 함수 활용
Python 람다 함수를 삼항 연산자처럼 활용할 수도 있습니다.
>>> (lambda: f"a:{a}", lambda: f"b:{b}")[a>b]()
'b:0.6780078581465793'중첩된 Python 삼항 연산자
삼항 연산자는 체인(chain) 형태로 연결하여 사용할 수도 있습니다.
>>> from random import random
>>> x = random()
>>> "Less than zero" if x<0 else "between 0 and 5" if a>=0 and a<=5 else "Greather than five"
실행 결과
'between 0 and 5'
x의 실제 값을 확인해 보겠습니다.
>>> x
0.08009251123993566
참고로, 삼항 연산자는 간단한 조건 분기를 한 줄로 처리할 때 유용하지만, 조건이 복잡해지거나 중첩이 깊어지면 오히려 가독성이 떨어질 수 있습니다. 로직이 단순한 경우에만 활용하고, 복잡한 분기 처리에는 일반적인 if-else 문을 사용하는 것이 좋습니다.