None은 값이 없음, 알 수 없음 정도의 의미를 가진다. 정수 0이나 빈 문자열 ''과 비슷하다고 생각할 수 있는데, 이들과 None은 엄연히 다르다. 예를 들어, 시험 점수를 다루고 있다고 하자. 점수가 0점인 것과, 점수가 정해지지 않은 것은 다르다. 이렇게 '알 수 없음'을 나타내기 위해 None을 사용할 수 있다.
score_100 = 100
score_0 = 0
score_none = None
print(score_none)
결과
None
'값이 없음'을 표현하는 값은 프로그래밍 언어마다 조금씩 다르다. null이 가장 대표적이고, NULL처럼 대문자로 표현하거나 None, nil로 표현하는 경우도 있다.
None은 NoneType 타입의 객체다.
print(type(None))
결과
<class 'NoneType'>
int, str과 같은 일반적인 타입들과 다르게, NoneType은 빌트인에 존재하지 않는다.
print(int)
print(int)
print(NoneType)
결과
<class 'int'>
<class 'int'>
Traceback (most recent call last):
File "example.py", line 3, in <module>
print(NoneType)
NameError: name 'NoneType' is not defined
Python 2에서는 types라는 모듈에 NoneType이 존재했으나, Python 3에서는 사라지게 되어 지금은 isinstance(x, NoneType)
과 같은 코드를 사용할 수 없다. 그러나 어떤 값의 None 여부를 판단하기 위해서는 isinstance 함수를 쓸 것 없이, x is None
을 사용하면 된다. NoneType을 굳이 쓰고 싶다면, NoneType = type(None)
처럼 정의해서 사용하도록 하자. Python 2의 types 모듈에서도 그렇게 하고 있었다 (실제 Cpython 2.7의 types.py 코드).