안녕하세요. 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 구문이 눈에 더 확 들어오는 것 같습니다.
중첩 한번 했다고 삼항 연산자는 벌써부터 눈에 들어오지 않네요.
이 경우에는 오히려 간결하게 한 줄로 쓰려고 쓴 삼항 연산자가 더 생각하게 더 헷갈리게 만드는 것 같습니다.
아무튼, 삼항 연산자도 중첩이 가능하다는 점. 알아두시면 좋을 것 같습니다.
이렇게 오늘은 파이썬의 특이한 삼항 연산자에 대해서 알아보았습니다.
개인적으로는 다른 언어의 삼항 연산자와 많이 달라서 조금 헷갈리긴 합니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 replace 설명 및 예제 (0) | 2021.07.19 |
---|---|
[python] 파이썬 isdigit 숫자 판별 (0) | 2021.07.16 |
[python] 파이썬 폴더 생성 방법 os.mkdir, os.makedirs, os.getcwd (0) | 2021.07.15 |
[python] 파이썬 assert (가정 설정문)에 대해서 (1) | 2021.07.14 |
[python] 파이썬 에러 종류 10가지 (2) | 2021.07.01 |
[python] 파이썬 raise 에러 발생시키기 (1) | 2021.06.30 |
[python] 파이썬 예외처리 try, except, else, finally 사용 방법 (0) | 2021.06.28 |
[python] 파이썬 in, not in 포함 확인 연산 (0) | 2021.06.23 |