최근 즐겨쓰는 패턴이 있었는데, 논리연산과 비트연산의 차이로 인해 오류나서 글을 적게 되었다.
난 valid 검증에 다음과 같은 패턴을 즐겨쓴다.
def is_valid():
valid = True
valide &= 조건_1
valide &= 조건_2
valide &= 조건_3
valide &= 조건_4
return valid
그러나 다음과 같은 문제가 발생했다.
li = [1, 2]
valid = True
valid &= len(li)
값을 예측해보자.
난 True를 예상했지만 값은 False가 뜨게 되었다.
이는 &가 논리 연산이 아닌 bit연산이기 때문이다.
Python에서 bool은 int의 subclass이다.
int -> bool은 0은 False 아니면 True이지만
bool -> int는 false는 0, True는 1이다.
bit연산은 int기준으로 되기에 1을 기준으로 &연산을 실행한다.
그렇기에 01과 10을 &하여 00이 나오게 되었다.
논리연산으로 2 and True를 하면 True가 나오지만,
비트연산으로 2 & True를 하면 0이 나온다.
다음과 같은 패턴이 한줄로 조건을 정렬할 수 있어서 애용하였지만,
논리연산을 명확히 명시하여 사용하는 것이 좋겠다.