Python의 삼항 연산자(조건부 연산자)를 사용하여 한 줄에 if 문 쓰기

사업

파이썬에는 한 줄에 if 문과 같은 프로세스를 설명할 수 있는 삼항 연산자(조건부 연산자)라는 쓰기 스타일이 있습니다.

다음은 샘플 코드와 함께 여기에 설명되어 있습니다.

  • 삼항 연산자의 기본 작성
  • if ... elif ... else ...이것을 한 줄로 설명하십시오
  • 목록 종합 표기법과 삼항 연산자 결합
  • 익명 함수(람다 식)와 삼항 연산자의 조합

일반적인 if 문에 대한 자세한 내용은 다음 문서를 참조하세요.

삼항 연산자의 기본 작성

Python에서 삼항 연산자는 다음과 같이 작성할 수 있습니다.

Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false

조건에 따라 값을 전환하려면 각 값을 그대로 쓰면 됩니다.

Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd

a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even

조건에 따라 처리를 전환하려면 각 식을 기술하십시오.

a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3

a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4

값을 반환하지 않는 식(None을 반환하는 식)도 허용됩니다. 조건에 따라 표현식 중 하나가 평가되고 프로세스가 실행됩니다.

a = 1
print('even') if a % 2 == 0 else print('odd')
# odd

일반 if 문으로 작성된 다음 코드와 동일합니다.

a = 1

if a % 2 == 0:
    print('even')
else:
    print('odd')
# odd

논리 연산자(and, or 등)를 사용하여 여러 조건식을 연결할 수도 있습니다.

a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even

a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd

if ... elif ... else ...한 줄 설명

if ... elif ... else ...이것을 한 줄에 쓰는 특별한 방법은 없습니다. 그러나 삼항 연산자의 조건식이 거짓일 때 평가되는 식에 다른 삼항 연산자를 사용하여 구현할 수 있다. 중첩 삼항 연산자의 이미지입니다.

그러나 가독성이 떨어지므로 광범위하게 사용하지 않는 것이 좋습니다.

a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive

a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

다음 조건식은 다음 두 가지로 해석할 수 있지만 전자(1)로 취급합니다.

A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C 

구체적인 예는 다음과 같다. 첫 번째 표현은 두 번째 표현인 것처럼 간주됩니다.

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative

result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero

목록 종합 표기법과 삼항 연산자 결합

삼항 연산자의 유용한 사용은 목록 이해 표기법으로 목록을 처리할 때입니다.

삼항 연산자와 목록 이해 표기법을 결합하여 목록의 요소를 교체하거나 조건에 따라 다른 처리를 수행할 수 있습니다.

l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]

목록 이해 표기법에 대한 자세한 내용은 다음 문서를 참조하세요.

익명 함수(람다 식)와 삼항 연산자의 조합

익명 함수(람다 식)에서도 간결하게 기술할 수 있는 삼항 연산자가 유용합니다.

get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

삼항 연산자와 관련이 없지만 위의 예는 람다 식에 이름을 할당합니다. 따라서 Python의 코딩 규칙 PEP8과 같은 자동 검사 도구는 경고를 생성할 수 있습니다.

이는 PEP8이 함수에 이름을 할당할 때 def 사용을 권장하기 때문입니다.

PEP8의 개념은 다음과 같습니다.

  • 람다 표현식은 예를 들어 이름을 지정하지 않고 호출 가능한 객체를 인수로 전달하는 데 사용됩니다.
  • 람다 식에서 def를 사용하여 이름으로 정의