본문 바로가기

Dev/Python

[Python] if val 과 if val is not None 어떤 것을 사용해야 하는가

환경: 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

 

Python: The Boolean confusion

`if val` and `if val is not None` are not the same!

towardsdatascience.com

 

'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