이전에 코드스테이츠에서 자바스크립트를 배우면서 논리 연산이라는 개념을 접했다. 강의 자료에는 논리 연산자의 결과에 Boolean이 아닌 값이 들어갈 수 있다며 아래와 같은 설명이 더해졌다.
이렇게 설명이 되어있었는데, 추가적으로 설명도 안되어있고, 강의 중에 언급을 제대로 해주지 않아 이후에 설명해주겠지 했는데 끝날 때까지 다시 만나볼 수 없었다...
이제와서 보니 저 위의 '그 이후로는 평가하지 않는다.'가 핵심이었다.
다행히 이번에 파이썬 기초 개념들을 공부하면서 논리 연산을 만났을 때는 단락 평가에 대한 개념이 보다 자세하게 적혀있어서 위의 미스테리를 풀 수 있게 되었다.
단락 평가는 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법을 말한다. 그리고 마지막으로 단락 평가를 실시한 값을 그대로 반환한다.
즉 and
연산자는 앞에 Falsy한 값이 나올 경우, 뒤에는 볼 것도 없이 무조건 False
이므로 앞의 값을 반환하고, or
연산자는 앞에 Truthy한 값이 나올 경우, 뒤에는 볼 것도 없이 무조건 True
이므로 앞의 값을 반환한다.
여기서 추가로 신경써야할건 '마지막으로 단락 평가를 실시한 값'을 그대로 반환한다는 점이다.
>>> True and 'test'
'test'
문자열 'test'
는 Boolean으로 따지면 True
라서 반환 값이 True
가 나올 것 같지만, 단락 평가를 실시한 값 그대로 반환되기 때문에 'test'
가 반환된다.
한편 위의 단락 평가 규칙은 and
와 or
이 동시에 등장할 때는 좀 다르게 볼 필요가 있다.
>>> False and not True or True
True
위의 경우 위에서 본 규칙에 따르면 and
의 앞에 False
가 나왔기 때문에 무조건 False
를 반환할 것 같다. 하지만 이는 평가식 안에 and
만 있을 때 해당한다. or
이 함께 들어있을 경우, and
앞의 False
만 본다고 평가를 완료할 수 없기 때문이다.
참고로 파이썬 논리 연산자에도 고려 우선순위는 다음과 같다.
not > and > or
알고 보니 어렵지 않은 논리였지만 뭔가 깨달음이 있던 배움이었다.