추가된 리스트를 반환하는 Append 함수 작성하기


list_a = [1,2,3]
list_b = [4,5,6]

list_c = list_a.append(list_b)

print(list_a)
>>> [1,2,3,4,5,6]

print(list_c)
>>> None

list_a.append 를 실행해서 결과 값을 받아오고 싶어 list_c 를 만들었습니다. list_a 는 의도 대로 list_b와 합쳐진 리스트로 변경이 되었습니다. 그런데 list_c 는 값이 None으로 list_a 와 같은 값이 저장되어 있지 않습니다.

왜 그럴 까요?

이는 append 메소드 가 결과를 반환 하지 않는 함수이기 때문이고, 이유는 append 메소드를 만든 사람이 그렇게 구현하였기 때문입니다. 프로그래밍에서 함수(메소드)는 구현하는 사람이 자유롭게 구현 할 수 있습니다. 무조건 결과값을 반환해야 한다거나 무조건 인수를 받아야 한다는 제약 자체가 아예 없다는 뜻입니다.

실생활로 예를 들어 생각해 볼까요? 공원에 놀러 갔더니, 관광객 2명이 함께 놀러와 도시락을 먹는 상황을 생각해 봅시다.

함수는 특정 작업을 하고, 주변 혹은 내부에 영향을 미치는 코드 단위라고 설명드렸습니다.

그렇다면 코드로 이러한 상황을 표현해 본다면, 관광객 2명이 도시락을 먹음으로 공원 주변을 변화 시키는 행위(함수의 기능)를 하는 함수로 생각 할수 있습니다. 여기서 관광객은 철수와 민수라고 한다면 이는 인수라고도 볼수 있습니다.

만약 공원에서 쓰레기를 버리고 가는 행위를 엄격히 금지한다면, 관광객들은 모두 쓰레기를 되가져 갈것입니다.(결과값(반환값)이 없음) 그렇다면 그자리에는 아무것도 남지 않을 것이고, 공원은 관광객이 도시락을 먹기 전과 후가 같은 상태로 유지가 될것입니다.

반환값이 없으니 그자리에 할당할 값(list_c) 이 없음을 알 수 있습니다.

그 반대의 경우라면 쓰레기를 버리고 갈것이고, 이는 함수가 실행되며 주변상황을 변화 시키고 쓰레기라는 반환 값을 내놓는 함수로 생각할 수 있을것 입니다.

프로그래밍에서도 마찬가지로, 같은 행위를 하더라도(도시락을 먹음으로 공원 주변을 변화 시키는 행위), 반환값이 있을 수도 없을 수도 있습니다.

살펴 보았듯이, python에서 제공하는 append함수는 반환값이 없는 함수 입니다. 그렇다면 그와 반대로 값을 반환하는 append 함수와 같은 기능을 하는 함수도 만들어 볼 수 있을 것입니다.


a = [1,2,3]
b = [4,5,6]

c = newAppend(a,b)

print(a)
>>> [1,2,3]

print(c)
>>>> [1,2,3,4,5,6]

위와 같이 a,b 리스트들을 합쳐 결과값으로 반환 하는 newAppend함수를 새로 만들어 봅시다.

함수를 만들기 전에 예로 들었던 공원에 놀러온 방문객들이 도시락을 먹는 행위를 하는 함수를 살펴봅시다.

def tour(chulsu,minsu) :
  도시락을 먹음
  return 쓰레기

만약 공원에서 엄격히 쓰레기 처벌을 하지 않는 다면 위와 같이 쓰레기를 놓고 갑니다.

함수안에서 기능을 하는데 전달되는 값들을 인수로 표현하고(철수,민수) 그에 따른 기능들을 def 키워드 밑에 서술합니다.

위와 같은 구조로 함수를 표현할 수 있는 것과 같이 newAppend함수도 새로 만들어 봅시다.

def newAppend(a,b) :
  a  b 합침.
  a 변하지 않음.
  return a b 합쳐진 리스트