>>> False and True
False
>>> True and 'red'
'red'
>>> True or False
True
>>> False or 'jh'
'jh'
>>> 'python' and True
True
>>> 'python' and False
False
위의 코드들을 적은 이유는 논리 연산에서 중요한 '단락 평가 (Short-circuit evaluation)'를 기록하기 위해서다.
- and 연산자 : 왼쪽, 오른쪽 피연산자 둘 다 True 이어야 True
- or 연산자 : 왼쪽, 오른쪽 피연산자 둘 중 하나라도 True 이면 True
- False and True 코드에서 왼쪽 피연산자가 False 이어서 <둘 다 True 이어야 True>가 성립되지 않기 때문에 오른쪽 피연산자를 평가하지 않고 왼쪽 피연산자( False )를 반환한다.
- True and 'red' 코드에서 왼쪽 피연산자가 True 이기 때문에 <둘 다 True 이어야 True>가 성립되는지 확인하기 위해 오른쪽 피연산자를 평가하여 오른쪽 피연산자( 'red' )를 반환한다.
- True or False 코드에서 왼쪽 피연산자가 True 이어서 <둘 중 하나라도 True 이면 True>가 성립되기 때문에 오른쪽 피연산자를 평가하지 않고 왼쪽 피연산자( True )를 반환한다.
- False or 'jh' 코드에서 왼쪽 피연산자가 False 이기 때문에 <둘 중 하나라도 True 이면 True>가 성립되는지 확인하기 위해 오른쪽 피연산자를 평가하여 오른쪽 피연산자( 'jh' )를 반환한다.
- 'python' and True 와 'python'and False 이 두 가지는 'python' 이 0 또는 \0 이 아니기 때문에 True 값이 되고, 오른쪽 피연산자의 값( True 와 False )을 반환한다.
- 단락 평가 (Short-circuit evaluation)란?
단락 평가란 논리 연산자를 사용하여 조건식을 평가할 때, 왼쪽의 피연산자 평가만으로도 오른쪽 피연산자는 평가하지 않고 결과를 도출하는 방법이다.
내용을 확인하면서 들었던 의문
ㅡ chatgpt 와 대화(기억나는 대로 기재)를 기반으로 작성하여 오류가 있을 수 있으니 추후 수정 필요
red_jh : 단락 평가를 하는 이유는?
chatgpt : 조건식이나 표현식의 평가 과정에서 불필요한 연산을 줄일 수 있어서 실행 속도를 향상시킬 수 있다. 또한, 피연산자가 함수 호출이거나 복잡한 연산을 수행하는 경우에는 부작용을 피할 수도 있다.
red_jh : '피연산자가 함수 호출이거나 복잡한 연산을 수행하는 경우에는 부작용을 피할 수도 있다.' 라고 함은?
chatgpt : 예를 들어 if x > 0 and some_function(x): 코드에서 x가 양수인 경우에만 some_function(x) 함수가 호출되고 그 결과를 사용한다. 그러나 만약 x가 음수인 경우에는 some_function(x) 함수 호출이 필요하지 않게 되고 이때, and 연산자를 사용하여 단락 평가를 수행하면 x가 음수인 경우에는 오른쪽 피연산자인 some_function(x) 함수 호출을 실행하지 않게 되니 이는 불필요한 함수 호출을 피할 수 있고, 이에 따라 부작용을 피할 수 있다.
정리 : 단락 평가(Short-circuit evaluation)는 불필요한 연산을 줄이고자 도입되었는데, and 연산자의 경우 왼쪽 피연산자가 False 이면 오른쪽 피연산자의 평가 없이 왼쪽 피연산자의 값을 반환하고, or 연산자의 경우 왼쪽 피연산자가 True 이면 오른쪽 피연산자의 평가 없이 왼쪽 피연산자의 값을 반환하는 방법이다.
and, or 연산자는 True, False 만 반환하는 연산자인 줄 알고 있었는데 오늘도 머릿속 HDD에 정보가 추가되었다.
ps. 이제 막 배우는 단계라 오류투성이일 수도 있으니 혹시나 잘못된 정보가 있다면 한 수 부탁드리겠습니다.