WeniVooks

검색

견고한 파이썬

None 자료형

1. None 자료형이란?

프로그래밍에서 '없음'이나 '비어있음'을 표현하는 것은 중요합니다. Python에서는 이를 None이라는 특별한 자료형으로 나타냅니다. None 자료형은 가질 수 있는 값이 None이 유일합니다.

x = None print(x)

None은 print로 직접 출력을 하지 않으면 출력이 되지 않습니다.

1.1 None 자료형의 연산

아래와 같이 None 타입에 무언가를 더하거나 빼거나, 곱하거나 나누는 연산은 에러를 일으킵니다. None과 None을 더하면 None이 나올 것 같지만 이러한 연산 자체를 허락하지 않습니다. 또한 True나 False처럼 값에 다른 값을 할당하는 것도 허락하지 않습니다.

None + 5
None + None
None = 10
None + 5
None + None
None = 10
1.2 None의 값은 항상 유일

None의 값은 항상 유일한 주소값을 가리킵니다. 여기서 id는 해당 변수가 가리키고 있는 주소를 나타냅니다.

x = None y = None print(id(x), id(y))

None을 확인할 때에는 아래처럼 등호 2개를 사용하는 것보다는 메모리 주소를 직접 확인하는 is 연산자를 사용하기를 권합니다. 이는 is None이 속도가 더 빠른 경우도 있지만 == 연산이 특수한 경우 우리가 생각하는 것과는 다르게 작동할 수 있기 때문입니다. 또한 파이썬 코딩 권고사항인 PEP8에서도 None의 확인은 is None을 권고하고 있습니다.

x = None print(x == None) # True, 하지만 이 방식은 권장되지 않습니다. print(x is None) # True, 이 방식을 사용하여 None을 확인하는 것이 좋습니다.

2. 나아가기

앞에서 말한 우리가 생각하는 것과 다르게 동작하는 경우는 어떤 경우가 있을까요? 아래와 같이 예를 들 수 있습니다.

class 캐릭터: # ... 체력, 마력, 공경력, 방어력을 정의하는 수많은 코드 ... def __eq__(self, other): return True 주인공 = 캐릭터() 보스 = 캐릭터() print(주인공 == None) print(주인공 == 100) print(주인공 == 보스) print(주인공 is None)

매직 메서드 __eq__는 비교연산이 가능하게 해주는 것입니다. 위 예제에서 알아두어야 할 것은 이 매직 메서드를 통하여 비교 연산을 할 경우 모두 True로 출력하게 했다는 것입니다. 하지만 실제로 주인공이나 보스가 None, 즉 비어있는 상태는 아니라는 것이죠. 따라서 등호보다는 is연산을 통해 None을 확인하세요.

{"packages":["numpy","pandas","matplotlib","lxml"]}
4.6 논리 자료형4.8 메서드 체이닝