이유 한 줄 요약 :
extend 함수는 return값이 none 이기 때문에, 이 return값을 어떠한 변수에 할당해서 사용하는 경우 그 변수의 값은 none이 되는 것이다.
우리는 파이썬에서 두 개의 리스트를 합치려고 할 때 extend 함수를 주로 사용합니다.
먼저 아래와 같이 사용하는 경우를 살펴보겠습니다.
# 첫번째 방식
lst1 = [1,2,3,4,5]
lst2 = [6,7,8,9,10]
# 두 리스트를 합치기 위해 extend 함수를 사용하자
lst1 = lst1.extend(lst2)
# print 함수로 확인
print(lst1) # none
lst1과 lst2를 합쳐서 변수 lst1에 그 값을 할당하는 경우입니다.
이상하게도 원하는 값인 [1,2,3,4,5,6,7,8,9,10]이 아닌 none이 나오는 것을 확인할 수 있는데요. 이번에는 반대로 이렇게 해 보겠습니다.
# 두번째 방식
lst1 = [1,2,3,4,5]
lst2 = [6,7,8,9,10]
# 두 리스트를 합치기 위해 extend 함수를 사용하자
lst1.extend(lst2)
# print 함수로 확인
print(lst1) # [1,2,3,4,5,6,7,8,9,10]
이번에는 lis1에 함수를 적용한 값을 따로 어딘가에 할당하지 않았습니다. 그런데 이번에는 의도한 대로 값이 출력되었습니다.
무슨 차이가 있는 걸까요? extend 함수의 정의에서 그 이유를 확인할 수 있습니다.
# 반환값이 None 이라는 의미의 주석이 달려 있다
def extend(self, __iterable: Iterable[_T]) -> None: ...
-> 표시는 함수의 반환값을 나타내주는 주석 표시로, 이에 따르면 extend의 반환값이 None이라는 것을 알 수 있습니다.
즉 extend 함수는 자신을 호출한 리스트를 변경시켜 주는 함수이지, 변경한 값을 반환해 주는 함수는 아니므로 extend를 사용할 때에는 해당 값을 재할당하는 것이 아닌, 리스트를 변경하는 두 번째 방식을 사용해야 원하는 결과를 얻을 수 있게 됩니다.
'python' 카테고리의 다른 글
[python] string 문자열 관련 메서드 간단 정리 (0) | 2023.09.29 |
---|---|
[python] bisect_left와 bisect_right 이해하기 (0) | 2023.08.15 |
[python] 리스트 내용 출력하기 (list print) (0) | 2023.05.25 |
[python] 파이썬 파일 처리와 디렉토리 (1) | 2023.05.03 |