논리 연산에서 중요한 부분이 단락 평가(short-circuit evalution)입니다. 단락 평가는 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법을 말합니다. 즉, and 연산자는 두 값이 모두 참이라야 참이므로 첫 번째 값이 거짓이면 두 번째 값은 확인하지 않고 바로 거짓으로 결정합니다.
# 첫 번째 값이 거짓이므로 두 번째 값은 확인하지 않고 거짓으로 결정
print(False and True) # False
print(False and False) # False
or 연산자는 두 값 중 하나만 참이라도 참이므로 첫 번째 값이 참이면 두 번째 값은 확인하지 않고 바로 참으로 결정합니다.
# 첫 번째 값이 참이므로 두 번째 값은 확인하지 않고 참으로 결정
print(True or True) # True
print(True or False) # True
특히 파이썬에서 논리 연산자는 이 단락 평가에 따라 반환하는 값이 결정됩니다. True, False를 논리 연산자로 확인하면 True, False가 나왔는데, True and 'Python'의 결과는 무엇이 나올까요?
>>> True and 'Python'
'Python'
문자열 'Python'도 불로 따지면 True라서 True and True가 되어 True가 나올 것 같지만 'Python'이 나왔습니다. 왜냐하면 파이썬에서 논리 연산자는 마지막으로 단락 평가를 실시한 값을 그대로 반환하기 때문입니다. 따라서 논리 연산자는 무조건 불을 반환하지 않습니다.
다음과 같이 마지막으로 단락 평가를 실시한 값이 불이면 불을 반환하게 됩니다.
>>> 'Python' and True
True
>>> 'Python' and False
False
여기서는 문자열 'Python'을 True로 쳐서 and 연산자가 두 번째 값까지 확인하므로 두 번째 값이 반환됩니다. 만약 다음과 같이 and 연산자 앞에 False나 False로 치는 값이 와서 첫 번째 값 만으로 결과가 결정나는 경우에는 첫 번째 값이 반환됩니다.
>>> False and 'Python'
False
>>> 0 and 'Python' # 0은 False이므로 and 연산자는 두 번째 값을 평가하지 않음
0
or 연산자도 마찬가지로 마지막으로 단락 평가를 실시한 값이 반환됩니다. 다음은 or 연산자에서 첫 번째 값만으로 결과가 결정되므로 첫 번째 값이 반환됩니다.
>>> True or 'Python'
True
>>> 'Python' or True
'Python'
만약 두 번째 값까지 판단해야 한다면 두 번째 값이 반환됩니다.
>>> False or 'Python'
'Python'
>>> 0 or False
False
댓글