[개발자 로드맵]/파이썬

[혼자 공부하는 파이썬] 콜백함수, map/filter 함수

Ramrider 2023. 9. 20. 22:09
728x90
반응형

들어가기 앞서

# 함수는 변수에 저장할 수 있다
def call_10_times():
    print("호출되었습니다")
    
a = call_10_times
print(a)

a()

# 함수를 변수에 집어넣을 수 있다.
# 위의 말은 함수 a를 호출 할 수도 있다는 말과 같다.

 

함수를 매개변수로 전달하기

# 함수는 변수에 저장할 수 있다
# 매개변수로 전달되는 함수를 콜백함수라고 한다.
def call_10_times(콜백함수):
    for i in range(10):
        콜백함수(i)
        # print_hello(i)
    
def print_hello(매개변수):
    print("안녕하세요", 매개변수)
    
# 매개변수를 함수로 입력해서 전달
call_10_times(print_hello)

 

콜백함수의 활용 예(1): map

# map()
# 이터레이터는 리스트와 비슷한 것이라고 일단 생각할 것
# 각각의 요소에 함수를 적용해서
# 새로운 이터레이터를 리턴한다.
# 이터레이터 = map(함수, 리스트)

def power(숫자):
    return 숫자 **2

A = [1, 2, 3, 4, 5]
이터레이터 = map(power, A)
print(list(이터레이터))

print([
    #표현식
    숫자 ** 2
    #반복문
    for 숫자 in range(1, 5+1)
])

 

콜백함수의 활용 예(1): filter

# filter(함수, 리스트)
# 리스트의 요소를 함수에 전달했을 때
# 결과로 True가 나오는 녀석을 모아서
# 새로운 이터레이터를 만듦

def 홀수인가요(숫자):
    if 숫자 %2:
        return True
    else:
        return False
    
A = [1, 2, 3, 4, 5]
이터레이터 = map(홀수인가요, A)
print(list(이터레이터))

# 리스트 내포로 구현해본다면
print([
    #표현식
    숫자
    #반복문
    for 숫자 in range(1, 5+1)
    #조건문
    if 숫자 %2 == 1
])

# 대부분의 경우 리스트 내포를 활용하지만
# 상황에 따라 map과 fliter함수로 구현하기도 한다.

 

map(), filter() 함수 구현하기

A = [1, 2, 3, 4, 5]

# map()
def my_map(콜백함수, 리스트):
    output = []
    for i in 리스트:
        output.append(콜백함수(i))
    return output

def power(숫자):
    return 숫자 ** 2

print(my_map(power, A))
    
# filter()
def my_filter(콜백함수, 리스트):
    output =[]
    for 숫자 in 리스트:
        output.append(콜백함수(숫자))
    return output
    
def is_odd(숫자) :
    return 숫자 %2 == 1

print(my_filter(is_odd, A))

 

참고자료

  • 한빛미디어의 윤인성 저자님의 혼자 공부하는 파이썬 책을 독학하면서 복습하기 위해 정리한 내용입니다.
728x90
반응형