환경: python 3.10
개발을 하다보면 변수에 값이 있는지 없는지를 검사하기 위해 if문을 사용하는 경우가 있습니다.
이 경우, 아래 2개의 코드 중 어떤것을 사용해야 하는지 고민에 빠지게 됩니다.
if val:
#데이터가 있으니 처리
if val is not None:
#데이터 처리
위 2가지 경우는 어떻게 사용하느냐에 따라 사용자가 예상하지 못했던 값을 돌려주기도 합니다.
먼저 if val is not None을 작성하면 python에서는 is 연산자를 호출합니다.
is 연산자는 좌/우의 값이 같은 오브젝트인지 확인합니다.
(None 변수는 파이썬에서 싱글톤으로 구현되어 있음)
그리고 if val의 경우, if는 다음값으로 boolean이 올 것으로 예상합니다.
하지만 val은 boolean 타입이 아니고 파이썬은 val 변수의 __bool__함수를 호출합니다.
즉 if val은 if val.__bool__로 바뀌어 연산하게 됩니다.
예를 들어, 아래 소스코드를 호출하면 결과는 else가 나옵니다.
arr = []
if arr:
print (f'if arr')
else:
print (f'else')
# else
arr = []
print (bool(arr))
# False
arr의 변수는 존재하지만 arr의 __bool__값은 False이기 때문입니다.
변수를 None으로 초기화 하였을 경우, if문에서는 is not None을 쓰는것이 정확한 방법인 것 같습니다.
그리고 배열에 대해 if문을 사용하게 되는경우 위의 내용을 잘 고려하여 사용해야 합니다.
더 자세한 예제는 아래 블로그를 참고하면 됩니다.
참고 블로그
https://towardsdatascience.com/python-the-boolean-confusion-f7fc5288f0ce
'Dev > Python' 카테고리의 다른 글
[django] ModelForm을 사용하여 데이터 등록 (0) | 2021.10.31 |
---|---|
hash 값 생성 (0) | 2021.10.30 |
[Python] 내장 함수 __str__, __repr__ (0) | 2021.10.23 |
[Python] Garbage Collector (0) | 2021.10.19 |
[django] 관리자 계정 생성 (0) | 2021.10.18 |