파이썬의 return문에 and, or 연산자를 사용할 수 있다.
먼저, and, or 연산자에 대해 정리해보자.
1) and 연산자
조건 A, B 모두 참이면 참(True)을 반환한다.
조건 A, B 중 하나라도 거짓이면 거짓(False)을 반환한다.
- True and True = True
- True and False = False
- False and True = False
- False and False = False
2) or 연산자
조건 A, B 중 하나라도 참이면 참(True)을 반환한다.
조건 A, B 모두 거짓이면 거짓(False)을 반환한다.
- True or True = True
- True or False = True
- False or True = True
- False or False = False
True, False가 아닌 조건문 또는 객체를 가지고 and, or 연산을 살펴보자.
파이썬에서 거짓으로 취급되는 형태는 숫자 0 또는 비어있는 문자열 등이 있으며, 거짓이면 False가 아닌 거짓 객체 그 자체를 반환함을 기억하고 아래 내용을 읽어주길 바란다.
and 연산자를 사용하여 아래 두 가지 경우를 살펴보자.
- True and False = False
- False and True = False
숫자 0은 파이썬에서 거짓(False) 객체이다. 따라서 위 두 연산의 결과는 False가 아닌 거짓 객체 그 자체를 반환한다.
만약, 둘 다 참(True) 객체 이거나 거짓(False) 객체이면 무엇을 반환할까?
- True and True = True
- False and False = False
0이 아닌 숫자 또는 비어있지 않은 문자열은 참(True) 객체이다.
두 and 연산의 결과를 보면 뒤쪽에 위치한 객체를 반환했음을 알 수 있다.
그 이유는 and 연산에서 앞에 있는 조건이 참(True)이면 뒤에 있는 조건에 따라 결과가 달라지기 때문이다.
뒤에 있는 조건이 참이면 True가 되는 것이고, 뒤에 있는 조건이 거짓이면 False가 되는 것이다.
따라서 이 예시도 앞에 위치한 객체가 True이기 때문에 뒤에 위치한 객체에 따라 결과가 달라진다. 뒤에 위치한 객체 역시 True이므로 그 객체 자체를 반환하는 것이다.
그럼 둘 다 거짓이면 결과가 어떻게 될까?
해석하는 방법은 똑같다. 앞에 위치한 객체의 참/거짓 여부를 먼저 판단한다.
이 경우에는 앞에 위치한 객체가 거짓(False)이다.
and 연산은 둘 다 참일 경우에만 참이고, 하나라도 거짓이면 결과는 거짓이다.
그러므로 앞에 위치한 객체가 거짓이므로 뒤에 위치한 객체는 볼 필요도 없이 결과는 거짓인 것이다.
따라서 거짓인 객체를 반환한다.
이제, or 연산자를 살펴보자.
or도 and와 똑같은 방식으로 작동한다.
or 연산자는 하나만 참이면 참(True)을 반환한다.
그러므로, 앞에 위치한 객체가 참이면 뒤에 위치한 객체는 볼 필요도 없이 앞에 위치한 객체를 반환한다.
만약, 앞에 위치한 객체가 거짓이면 뒤에 위치한 객체를 살펴보아야 한다.
뒤에 위치한 객체가 참이면 참 객체를, 거짓이면 거짓 객체를 반환한다.
결국 뒷 객체의 참 거짓에 상관없이 뒤에 위치한 객체를 반환하는 것이다.
그럼 return문에서 and, or 연산자를 어떻게 활용할 수 있을까?
조건에 따라 return 해야 하는 값이 다를 때 and, or 연산자를 사용할 수 있다.
n이라는 자연수가 주어질때, 2부터 4까지의 수 중 n을 나눴을 때 나머지가 0이 되는 수를 리스트로 return 하는 함수가 있다고 가정해 보자.
여기서 사용된 or 연산자를 살펴보면, 앞쪽에 위치한 [i for i in range(2,5) if n%i == 0]이라는 리스트가 참이면 이 리스트를 그대로 반환한다.
return [i for i in range(2,5) if n%i == 0] or [-1]
하지만 빈 리스트이면 어떻게 될까?
앞에 위치한 리스트가 거짓 객체이므로 뒤에 위치한 리스트가 참인지 거짓인지 판별해야 한다.
[-1]은 빈 리스트가 아니다. -1이라는 값을 가진 리스트로 참 객체이다.
따라서 False or True의 결과는 True이므로 참 객체인 [-1]을 리턴한다.
실제로 n에 값을 넣어 함수를 실행해 보면 아래와 같은 결과가 출력된다.
n=4이면 2에서 4까지의 수로 n을 나눌 수 있는 수는 2, 4이므로 [2, 4]를 리턴한다.
n=7이면 2에서 4까지의 수로 n을 나눌 수 있는 수는 없다. 그러므로 앞에 위치한 리스트는 빈 리스트로 거짓이므로 [-1]을 리턴한다.
이와 같이, 어떤 조건에 따라 return 해야 하는 값이 다를 때 return 문에 and, or 연산자를 사용할 수 있다.