본문 바로가기
코딩/파이썬

파이썬 - 콜백함수와 람다함수

by Song1234 2024. 3. 18.

1. 콜백함수(callback function)

콜백 함수는 다른 함수에 인자로 전달되어, 어떤 이벤트나 특정 조건에서 실행되게 되는 함수를 말합니다. 콜백 함수는 주로 비동기 작업이나 특정 이벤트 발생 시점에 어떤 동작을 수행할 때 사용됩니다.
동기식은 시간이 많이 걸려도 무조건 순서대로 처리를 하고,
비동기식은 순서상관없이 속도가 빠른 것들부터 먼저 처리를하고 느린것들은 나중에 처리를한다

def callback_func(func):# 함수의 메모리 전달
    for i in range(5):
        func() # 전달받은 함수를 실행
def print_hello():
    print('안녕하세요! 파이썬!')
print_hello()

안녕하세요! 파이썬!

callback_func(print_hello)

안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!


def callback_func(func, num):
    for i in range(num):
        func(i)
def print_hello(num):
    print('안녕하세요! 파이썬!', num)

def print_hi(num):
    print('하이! 파이썬!', num)
callback_func(print_hello, 3)

하이! 파이썬! 0
하이! 파이썬! 1
하이! 파이썬! 2


2. 람다 함수(Lambda Function)

람다 함수는 파이썬에서 익명의 간단한 함수를 생성하기 위한 특별한 구문입니다. "익명의 함수"라는 것은 함수에 고유한 이름이 지정되지 않았음을 의미합니다. 람다 함수는 일반적인 함수(def를 사용하여 정의)와는 달리, 한 줄로 표현되는 짧고 간결한 함수를 생성할 때 주로 사용됩니다.
람다함수는 메모리에 저장되지 않는다.

# 일반적인 함수
def square(x):
    return x ** 2
square(5)

결과:
25

# 람다함수
# 람다의 특징은 무조건 리턴형이기 때문에 return을 쓰지않는다.
square = lambda x: x ** 2
# 람다함수도 메모리에 저장 할 수 있다.
print(square(5))
print(square(4))

결과:
25
16

# 일반적인 람다함수 사용, 메모리에 저장되지 않는다.
(lambda x: x ** 2)(5)

결과: 25


# 일반함수 사용
def sort_age(x):
    return x['age']
people = [{'name,':'오렌지', 'age':30}, {'name,':'김사과', 'age':20}, {'name,':'반하나', 'age':25}]
sorted_people = sorted(people, key=sort_age) # 키값을 함수에전달 후 age값을 리턴받아 정렬

print(sorted_people)

결과:
[{'name,': '김사과', 'age': 20}, {'name,': '반하나', 'age': 25}, {'name,': '오렌지', 'age': 30}]

# 람다함수 사용
people = [{'name,':'오렌지', 'age':30}, {'name,':'김사과', 'age':20}, {'name,':'반하나', 'age':25}]
sorted_people = sorted(people, key=lambda x: x['age'])
print(sorted_people)

결과:
[{'name,': '김사과', 'age': 20}, {'name,': '반하나', 'age': 25}, {'name,': '오렌지', 'age': 30}]

 

위처럼 sorted 에만 쓰고 다른곳에서 쓰이지 않는 함수 를 lambda 를 이용하여 메모리에 저장하지 않고 한번 사용후 사라지는 함수를 만들어 사용할수있다.


3. 람다가 유용하게 사용되는 대표적인 함수

3-1. filter함수

filter()는 파이썬의 내장 함수로, 주어진 함수의 조건을 만족하는 항목만으로 이루어진 이터레이터를 반환합니다. 이 함수는 주로 리스트나 다른 순차적인 데이터 타입에서 특정 조건을 만족하는 항목들만을 필터링할 때 사용됩니다.

li = [1, 5, 7, 10, 15, 17, 20, 22, 25, 28]
def even(n): # 짝수이면 True 홀수이면 False 값을 리턴
    if n % 2 == 0:
        return True
    else:
        return False
result = list(filter(even, li)) # even 함수에 li 를 전달해 True값만 리턴
print(result)

결과:
[10, 20, 22, 28]

result = list(filter(lambda x: x%2 == 0, li))
print(result)

결과:
[10, 20, 22, 28]

 

filter()는 함수명과 값을 받아 해당 함수를 참조해 값을 처리한다.


3-2. map 함수

map()는 파이썬의 내장 함수로, 주어진 함수를 이터러블의 모든 항목에 적용하여 결과를 반환하는 이터레이터를 생성합니다. 이 함수는 주로 리스트나 다른 순차적인 데이터 타입의 항목 각각에 함수를 적용할 때 사용됩니다.

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers)) # numbers의 값에 제곱을해 리턴
print(squared_numbers)

결과:
[1, 4, 9, 16, 25]

list1 = [1, 2, 3]
list2 = [4, 5, 6]
summed = list(map(lambda x, y: x + y, list1, list2)) # list1,list2의 값을 받아 더한후 리턴
print(summed)

결과:
[5, 7, 9]

words = ['apple', 'banana', 'cherry']
uppercase_words = list(map(str.upper, words)) #str.upper라는 함수의 메모리 주소를받아 words의 문자열에 적용후 리턴(값을 전달하는게 아닌 주소값을 가져오기와 사용하기위해 ()를 사용하지않음)
print(uppercase_words)

결과:
['APPLE', 'BANANA', 'CHERRY']

 

map()은 전달받은 모든 값을 전달받은 함수의 수식을 적용해 값을 리턴한다.

'코딩 > 파이썬' 카테고리의 다른 글

클로저와 데코레이터  (1) 2024.03.19
파이썬 - 객체지향과 클래스  (3) 2024.03.18
파이썬 - 변수의 범위  (0) 2024.03.18
파이썬 - 사용자 정의 함수  (0) 2024.03.15
컬렉션과 반복문  (2) 2024.03.15