python에서 None은 NoneType class의 특별한 object이다.
None value 를 사용하기 위해서는 아래와 같이 사용하면 된다.
None
만약 type() 함수를 사용해서 None의 type을 확인해보면, 아래와 같이 NoneType class를 확인할 수 있다.
print(type(None))
None은 NoneType class의 singleton object이다. 이것은 python이 runtime에 오직 하나의 None 객체를 생성한다는 것을 의미한다.
그렇기 때문에, 만약 "=="과 "is" operator를 사용하여 None과 None을 비교하면 아래와 같은 결과를 얻을 수 있다.
print(None == None)
print(None is None)
값을 None과 비교하기 위해 is와 is not 연산자를 사용하는 것은 좋다.
그 이유는 사용자 정의 object의 경우 overriding 기법을 사용하여 __eq__() 함수를 재정의하여 사용할 수 있기 때문이다.
아래 예제를 살펴보자.
class Apple:
def __eq__(self, other):
return True
apple = Apple()
print(apple == None)
apple object는 None이 아니지만, __eq__()의 재정의를 통해 강제로 true를 return하면서, 실제 결과와 다르게 None과 같다는 결론이 나와버렸다.
하지만, "is" operator는 재정의(overriding)할 수 없다. 그만큼 안전(?) 하다.
1. None value의 사용 예
다음 예제를 살펴보자.
아래 코드의 의도대로라면, 아래와 같은 결과를 예상하지만 실제 결과는 다르다.
def append(num, nums=[]):
nums.append(num)
return nums
n = append(1)
print(n)
m = append(2)
print(m)
append() 함수 호출 시, default 인자 값인 nums =[]이 수행되어 호출 마다 초기화가 될 것으로 예상되나, 실제 결과는 그렇지 않다. 최초 실행 시에만 리스트를 생성하고 이후부터는 해당 list를 그대로 사용한다.
2. Solution
def append(num, nums=None):
if nums is None:
nums = []
nums.append(num)
return nums
n = append(1)
print(n)
m = append(2)
print(m)
참고 : https://www.pythontutorial.net/advanced-python/python-none/
[파이썬(Python)] #30 sys.argv 사용하기 (0) | 2021.10.14 |
---|---|
[파이썬(Python)] #29 YAML 파일 다루기 (0) | 2021.09.29 |
[파이썬(Python)] #28 매직 메소드(magic methods) (0) | 2021.09.27 |
[파이썬(Python)] #26 문자열 템플릿 (string template) (2) | 2021.09.27 |
[파이썬(Python)] #25 상속 (0) | 2021.09.17 |