[Python 기초] map함수 사용법, 작동원리

송상현·2024년 7월 12일

Python 기초

목록 보기
1/1
post-thumbnail

📖 map 함수란?

python map() 함수는 여러 개의 데이터를 받아서 각각의 요소에 함수를 적용한 결과를 반환하는 내장함수이다. 이때 데이터는 반복가능한 즉, iterable한 객체를 받을 수 있다.

iterable은 반복가능한 모든 객체로, for와 같은 반복문에서 사용이 가능하다.
ex. list, string, dict, tuple, range ...

📖 map 함수 기본 문법

map(function, iterable)
  • function : 각 요소에 적용할 함수
  • iterable : 함수를 적용할 데이터 집합

map() 함수는 iterable의 각 요소에 대해 function 함수를 적용한 결과를 새로운 iterator로 반환한다. 함수를 적용한 각 요소가 새로운 iterator의 각 요소가 된다.

iterator란 iterable의 값을 하나씩 꺼낼 수 있는 도구이다. 
이터러블 객체에 iter()함수를 호출하여 반환할 수 있다.

📖 map 함수 예시

def compute_square(x):
    print(f"Computing square of {x}")
    return x * x

numbers = [1, 2, 3, 4, 5]
squares = map(compute_square, numbers)

for square in squares:
    print(square)

# 출력결과
# Computing square of 1
# 1
# Computing square of 2
# 4
# Computing square of 3
# 9
# Computing square of 4
# 16
# Computing square of 5
# 25

위 예시는 iterator의 특성 중 하나인 지연평가(Lazy Evaluation)를 보여주는 사례이기도 한데(map 함수가 iterator를 반환하므로),
파이썬에서는 제너레이터나 이터레이터를 사용하지 않을 시 코드를 순차적으로 즉각 처리하는 즉시 평가(Eager Evaluation)가 이루어지기 때문이다.

예를 들어, 밑의 코드를 살펴보자.

def compute_square(x):
    print(f"Computing square of {x}")
    return x * x

numbers = [1, 2, 3, 4, 5]
squares = [compute_square(x) for x in numbers]

for square in squares:
    print(square)

# 출력 결과
# Computing square of 1
# Computing square of 2
# Computing square of 3
# Computing square of 4
# Computing square of 5
# 1
# 4
# 9
# 16
# 25

compute_square 함수가 호출될 경우, 문자열이 출력된 후 모든 숫자의 제곱이 즉시 계산되어 리스트 squares에 저장된다. 이렇게 map()과 같은 이러네이터는 필요할때만 값을 계산하여 계산 비용을 효율적으로 처리한다.


📖 map 함수 동작 원리(다수의 iterable)

  1. 함수와 여러 이터러블을 인자로 받는다.
  2. 각 이터러블의 동일한 위치에 있는 요소들을 동기화하여 함수의 인자로 전달
  3. 함수를 적용하고, 각 결과를 이터레이터의 값으로 반환한다.
여러 이터러블의 길이가 다르면 가장 짧은 이터러블의 길이만큼만 동작하며,
나머지 이터러블의 값은 무시된다.

map 함수 이해를 위해선 itrable과 iterate 개념 이해가 필수적으로 보이는데, 이후 포스팅은 이에 대해 다뤄봐야겠다.

profile
데이터과학, 수학

0개의 댓글