상세 컨텐츠

본문 제목

[파이썬(Python)] #27 None Value

python

by 빨간눈동자 2021. 9. 28. 00:24

본문

반응형

 

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/

반응형

관련글 더보기