문제의 역사
map() 함수는 Python의 초기 버전부터 기능적 프로그래밍의 반영으로 존재합니다. 이 함수는 반복 가능한 객체의 각 요소에 함수 적용을 위해 사용됩니다.
문제
모든 초보 개발자가 map, 생성기 및 리스트 표현의 차이를 이해하는 것은 아닙니다. 성능, 가독성, 데이터 지연 처리와의 호환성에 대한 질문이 발생합니다.
해결책
map() 함수는 함수와 하나 이상의 반복 가능한 객체를 받아서 각 요소에 순차적으로 함수를 적용하는 지연 반복자를 반환합니다. 이는 메모리를 효율적으로 사용하고 중간 리스트를 생성하지 않고도 대량의 데이터를 처리하게 합니다.
코드 예:
# map을 통한 숫자의 제곱 반환 numbers = [1, 2, 3, 4] squares = map(lambda x: x**2, numbers) print(list(squares)) # [1, 4, 9, 16]
주요 특징:
map() 함수가 두 개 이상의 시퀀스를 동시에 작업할 수 있습니까? 어떻게 해야 합니까?
예, 함수가 동일한 수의 인수를 수용하는 경우 여러 시퀀스를 전달할 수 있습니다. 가장 짧은 반복 가능한 객체가 끝날 때 반복이 종료됩니다.
코드 예:
a = [1, 2, 3] b = [4, 5, 6] res = list(map(lambda x, y: x + y, a, b)) print(res) # [5, 7, 9]
None을 반환하는 함수를 map()에 전달하면 무엇을 반환합니까?
map의 각 요소는 None이 됩니다. 함수가 명시적으로 값을 반환하지 않으면 항상 결과는 None의 리스트가 됩니다:
def print_val(x): print(x) # return 없음 list(map(print_val, [1,2,3])) # [None, None, None] 및 콘솔에 세 번 출력
map()과 리스트 표현 사이의 메모리 소비의 차이는 무엇입니까?
map은 전체 결과를 즉시 메모리에 생성하지 않으며, 요청 시 계산합니다; 리스트 표현 [...]은 전체 리스트를 생성합니다. 대량의 데이터에 대해서는 즉시 전체 결과가 필요하지 않은 경우 map을 사용하는 것이 바람직합니다.
프로젝트에서 파일에 기록하는 함수로 리스트를 순회하기 위해 map을 사용했지만, 값을 반환하는 것을 잊었습니다. 데이터가 생길 것이라고 기대했지만, map은 None의 반복자를 반환했습니다.
장점:
단점:
대량의 로그 리스트를 처리하고 필터링하기 위해 map을 사용하고, 결과를 반환하는 순수 함수를 작성했습니다. map의 반복자는 메모리 오버플로우 없이 파일에 기록할 값을 순차적으로 제공했습니다.
장점:
단점: