파이썬

[Python] Python에 삼항 조건부 연산자가 있습니까?

zooheon 2022. 7. 31. 13:43
반응형

Python 삼항 조건부 연산자 가 있습니까?

 

예, 버전 2.5 에 추가 되었습니다. 표현식 구문은 다음과 같습니다.

a if condition else b

먼저 평가된 다음 의 부울 값 에 따라 or condition중 하나 가 평가되고 반환 됩니다. 로 평가 되면 then 은 평가되어 반환되지만 무시됩니다. 그렇지 않으면 when 이 평가되어 반환되지만 무시됩니다.abconditionconditionTrueabba

condition이것은 참일 때만 a평가되고 b전혀 평가되지 않고, condition거짓일 때만 b평가되고 전혀 평가되지 않기 때문에 단락을 허용 a합니다.

예를 들어:

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

조건문은 이 아니라 표현식 입니다. 즉, 조건식 내에서 할당 문 이나 다른 을 사용할 수 없습니다 .pass

>>> pass if False else x = 3
  File "<stdin>", line 1
    pass if False else x = 3
          ^
SyntaxError: invalid syntax

그러나 조건식을 사용하여 다음과 같이 변수를 할당할 수 있습니다.

x = a if True else b

조건식은 두 값 사이를 전환하는 것으로 생각하십시오. 그것은 당신이 '한 가지 가치 또는 다른 가치' 상황에 있을 때 매우 유용하지만, 다른 많은 일을 하지는 않습니다.

명령문을 사용해야 하는 경우 조건식 대신 일반 명령문if 사용해야 합니다 .


몇 가지 이유로 일부 Pythonistas에 의해 눈살을 찌푸리게 한다는 점을 명심하십시오.

  • 인수의 순서는 다른 condition ? a : b많은 언어(예: C , C++ , Go , Perl , Ruby , Java , JavaScript 등)의 고전적인 삼항 연산자의 순서와 다르므로 사람들이 Python의 " 놀라운" 행동은 그것을 사용합니다(인수 순서를 바꿀 수 있음).
  • 어떤 사람들은 그것이 정상적인 생각의 흐름(조건을 먼저 생각하고 그 다음에 효과를 생각함)과 반대되기 때문에 그것을 "조금 다루기 힘들다"고 생각합니다.
  • 문체 이유. ('inline if'이 정말 유용하고 스크립트를 더 간결하게 만들 수 있지만 실제로 코드를 복잡하게 만듭니다)

순서를 기억하는 데 문제가 있는 경우 큰 소리로 읽을 때 (거의) 의미하는 바를 말하는 것을 기억하십시오. 예를 들어, x = 4 if b > 8 else 9는 로 소리 내어 읽습니다 x will be 4 if b is greater than 8 otherwise 9.

공식 문서:

 

튜플로 색인을 생성할 수 있습니다.

(falseValue, trueValue)[test]

testTrue 또는 False 를 반환해야 합니다 .
항상 다음과 같이 구현하는 것이 더 안전할 수 있습니다.

(falseValue, trueValue)[test == True]

또는 내장을 사용하여 부울bool()을 보장 할 수 있습니다.

(falseValue, trueValue)[bool(<expression>)]

 

2.5 이전 버전의 경우 트릭이 있습니다.

[expression] and [on_true] or [on_false]

on_true잘못된 Boolean 값을 가질 때 잘못된 결과를 줄 수 있습니다 . 1

표현식을 왼쪽에서 오른쪽으로 평가하는 이점이 있지만 내 의견으로는 더 명확합니다.

1. C의 "?:"에 해당하는 삼항 연산자가 있습니까?

 

반응형