<개인공부>/[Python]

[python] 파이썬 삼항 연산자 (if ~ else ~)

BlockDMask 2021. 7. 12. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 사용하는 삼항 연산자에 대해서 알아보겠습니다.

<목차>
1. 파이썬에서의 삼항 연산자
2. 파이썬 삼항 연산자 예제

 

1. 삼항 연산자 (Ternary Operators)


1-1) 삼항 연산자란?

삼항 연산자는 사실 굳이 필요는 없는 연산자입니다.
일반적인 if ~ else 문을 통해서 해결할 수 있는 연산을 "한 줄로 간단하고 간결하게" 나타낼 수 있기 때문에 나오게 된 것입니다.

아래와 같이 간단한 연산을 하는데 if ... else ... 까지 총 4줄의 코드가 필요한데.
삼항 연산자를 사용하면 간단하게 1줄로 해결이 가능합니다.

a = 10

# 일반적인 if ~ else 구문
if a > 5:
	// [True 일 때]
else:
	// [False 일 때]
    
   
# 삼항 연산 if ~ else 구문
[True일때] if a > 5 else [False일때]

이런 식으로 한 줄로 표현이 가능해버려 집니다.

 

1-1) 삼항 연산자 모양

[True] if [Condition] else [False]

[참일때] if [조건문] else [거짓일때]

이런 식의 모양을 가지고 있습니다.

맨 앞에 [조건문]이 참일 경우에 행할 것을 입력하고, if 와 else 사이에는 검사할 [조건문]을 집어넣습니다.
그리고 else 뒤에는 [조건문]이 거짓일 경우 행할 명령을 입력하면 됩니다.

간단하게 변수 a가 짝수면 "짝수", 홀수면 "홀수"라고 해야 하는 조건문이 있다고 하면 
삼항 연산자로 표현하면 아래와 같습니다.

a = 10

print("짝수") if a % 2 == 0 else print("홀수")

만약에 삼항 연산을 사용하지 않는다면 이런 식으로 표현이 가능하겠죠?
if a % 2 == 0:
    print("짝수")
else:
    print("홀수")

벌써 4줄이 생겨버렸네요.

이렇게 삼항 연산을 사용하면 간단한 연산 같은 경우에는 코드가 깔끔해지는 이점이 있습니다.
하지만, 복잡한 연산이나 삼항 연산을 마구잡이로 사용하게 된다면 코드 가독성이 떨어지겠죠?

 

 

2. 삼항 연산자 사용법


2-1) 삼항 연산 예제 1

# 짝수인지 홀수인지 판단하는 예제
a = 10

# 삼항 연산
print("even") if a % 2 == 0 else print("odd")


# 기본 연산
if a % 2 == 0:
    print("even")
else:
    print("odd")

위에서도 소개한 예제입니다. 사이좋게 짝수가 나오는 것을 볼 수 있습니다.
삼항 연산자 쪽의 코드가 훨씬 깔끔해 보이네요.

 

 

2-2) 삼항 연산 예제 2

간단하게 삼항 연산자를 이용해서 배열에서 가장 작은 수와 가장 큰 수를 가지고 오도록 예제를 만들어 보았습니다.

arr = [1, 30, 20, -10, 10, 0, 24, 60, 3, -29]

min_value = arr[0]
max_value = arr[0]

for val in arr:
    min_value = val if val < min_value else min_value
    max_value = val if val >= max_value else max_value


print(f"min_value : {min_value}")
print(f"max_value : {max_value}")

for 반복문을 이용해서 리스트를 돌면서 
각 숫자를 비교해서 제일 큰 값과, 제일 작은 값을 가지고 오도록 코드를 작성했는데

이 경우에 삼항 연산을 사용하면 큰값 삼항 연산 1줄, 작은 값 삼항 연산 1줄 해서 2줄이면 코드가 작성되는데 
일반적인 if ~ else를 사용하면 4줄? 정도 되겠죠? for 반복문 안에 또 if, else, 들여 쓰기도 생기니 좀 더 복잡해 보일 수도 있겠네요.

 

 

2-2) 삼항 연산자 중첩

삼항 연산자서도 if ~ elif ~ else 를 표현할 수 있는데요. 
바로 삼항연산자 중첩을 이용하면 if, elif, else 를 표현할 수 있습니다.

한번 중첩을 시키면 이런 식의 식이 됩니다.

[True1] if [Condition1] else [True2] if [Condition2] else [False]

중첩 한번 했는데 벌써 복잡해 보이지 않나요? 이 식을 if ~ elif ~ else 로 표현하면 이렇게 되겠죠?
if [Condition1]:
    [True1]
elif [Condition2]:
    [True2]
else
    [False]

이런 식이 됩니다.
말이 너무 길었네요. 바로 예제로 가시죠.

# arr[index] 이 2의 배수인지, 3의 배수인지 아니면 다른 수의 배수인지
arr = [15, 16, 17]

# 일반적인 if ~ elif ~ else
print("1. 일반")
for val in arr:        
    if val % 2 == 0:
        print(f"{val}은 2의 배수")
    elif val % 3 == 0:
        print(f"{val}은 3의 배수")
    else:
        print(f"{val}은 2, 3 배수 둘다 아님")


# 삼항 연산자 if ~ elif ~ else 표현
print("\n2. 삼항")
for val in arr:
    print(f"{val}은 2의 배수") if val % 2 == 0 else print(f"{val}은 3의 배수") if val % 3 == 0 else print(f"{val}은 2, 3배수 둘다 아님")

인자로 들어온 숫자가 2의 배수이면 "2의 배수", 3의 배수이면 "3의 배수" 그렇지 않으면 "2, 3 배수 아님"을 출력하도록 코드를 작성해보았습니다.
이 경우에 개인적으로는 if ~ elif ~else 와 같이 일반적인 if 구문이 눈에 더 확 들어오는 것 같습니다.
중첩 한번 했다고 삼항 연산자는 벌써부터 눈에 들어오지 않네요.
이 경우에는 오히려 간결하게 한 줄로 쓰려고 쓴 삼항 연산자가 더 생각하게 더 헷갈리게 만드는 것 같습니다.

아무튼, 삼항 연산자도 중첩이 가능하다는 점. 알아두시면 좋을 것 같습니다.

 

 

이렇게 오늘은 파이썬의 특이한 삼항 연산자에 대해서 알아보았습니다.
개인적으로는 다른 언어의 삼항 연산자와 많이 달라서 조금 헷갈리긴 합니다.

반응형