Python 동시 비교의 함정

Heath_Jeong·2021년 3월 4일
0

편리한 동시 비교

(* 정확한 용어를 몰라 동시 비교라고 표현했습니다.)

C 와 같은 많은 언어와 다르게 파이썬은 동시 비교를 지원한다.
예를 들어 case 1 : a < b and b < c 연산을 간단하게
case 2 : a < b < c 이렇게 작성할 수 있는 것이다.

동시비교의 원리

내부적으로 동시비교 연산은 피연산자1 연산자1 피연산자2 연산자2 피연산자3 가 있으면,
피연산자1 연산자1 피연산자2 and 피연산자2 연산자2 피연산자3 으로 변환된다.

즉, a < b < ca < b and b < c 가 된다.
이 점을 꼭 기억하자!

case 1

if 1 < 2 and 2 < 3:
    print("Same")

case 2

if 1 < 2 < 3:
    print("We are")

동시 비교의 함정

이렇게 편리해보이기만한 동시 비교는 쉽게 프로그래머로 하여금 함정에 빠지게 한다.

  1. 4 != 0 not in [1, 2, 3]
    => True
  2. (4 != 0) not in [1, 2, 3]
    => False
  3. 4 != 0 not in [0, 1, 2, 3]
    => False
  4. (4 != 0) not in [0, 1, 2, 3]
    => False

이 문제를 쉽게 맞췄다면 동시 비교 개념을 잘 이해하고 있는 것이다.
하지만 잘 모르겠다면 다시 기본 원리를 생각해보자.

1 번과 3 번은 피연산자1 연산자1 피연산자2 연산자2 피연산자3 꼴이므로 피연산자1 연산자1 피연산자2 and 피연산자2 연산자2 피연산자3
식으로 치환된다.

반면, 2 번과 4 번은 괄호로 인해 괄호를 먼저 수행하고 나면 피연산자1 연산자1 피연산자2 의 형태가 된다.


결론

피연산자1 연산자1 피연산자2 연산자2 피연산자3 연산은 `피연산자1 연산자1 피연산자2 and 피연산자2 연산자2 피연산자3'
연산이다.


참조

profile
데이터로 문제를 해결하는 엔지니어를 꿈꿉니다.

0개의 댓글