파이썬 map함수 질문있습니다.
조회수 2347회
파이썬에서 유용하게 쓰이는 map함수의 첫번째 인자는 함수인데, 두번째 인자는 반복가능한 자료형이라는게 정확히 무슨 뜻인지 모르겠습니다.
그리고 반환형이 리스트형이라면 왜 list(map(함수, iterable))와 같이 앞에 list를 굳이 붙이는 이유가 뭐죠?
1 답변
-
좋은 질문이네요.
자 우선 map 이라는 함수의 용도는 어떤 컬렉션(집합)의 모든 요소에 대해 첫번째 인자인 함수의 인자로 대입하여 실행하고 결과를 컬렉션으로 받기 위해 사용하는 겁니다.
예를들어
numbers = range(1, 11) def multiply(number): return number * 2 list(map(multiply, numbers)) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
numbers 에는 1~10 까지의 수가 있습니다.
map(multiply, numbers) 는 numbers 를 반복하여 첫요소부터 끝요소까지 하나씩 꺼내어 multiply 함수인자로 대입하여 결과를 저장하라는 겁니다.
즉 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] 와 같이 만들게 됩니다.
사실 이 부분의 이해는 함수형 프로그래밍을 공부해보면 이해하기가 좋습니다. 함수형 프로그래밍은 근래의 모던한 언어들은 (어느정도는)모두 제공하는 필수적인 요소라고 할 수 있습니다.
쉽게 사상을 집합으로 다루게 해주기 때문에 간결한 논리표현에 많은 도움이 됩니다.
그리고 왜 map 의 결과에 list로 변환을 하는 이유를 설명드리면 파이썬 2 에서는 list로 결과를 받았기 때문에 명시적인 변환이 필요없었습니다.
python 3 이 되면서 generator 로 결과값이 변경되었습니다.
그 이유는 메모리 사용을 줄이기 위해서입니다.
range 함수도 python 2에서는 list를 반환했었습니다.
python 2 에서는 range(0, 99999999) 와 같이 큰 list를 생성하면 메모리가 부족하게 되기 때문에 생성할 수가 없었습니다.
그러나 python 3 에서는 generator 를 반환하기 때문에 메모리 사용률에 관계없이 사용할 수 있습니다.
그 이유로 map 의 결과값도 list가 아닌 generator 를 반환합니다. generator 이기 때문에 list 를 이용해서 반복을 모두 수행하게 하는 것입니다.
generator 는 python 3 의 컬렉션에서 핵심이니 꼭 이해하시기 바랍니다.
댓글 입력