콜백함수와 람다함수

현서·2025년 1월 2일

파이썬

목록 보기
17/27
post-thumbnail

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)

callback_func(print_hi, 5)
안녕하세요! 파이썬! 0
안녕하세요! 파이썬! 1
안녕하세요! 파이썬! 2
하이! 파이썬! 0
하이! 파이썬! 1
하이! 파이썬! 2
하이! 파이썬! 3
하이! 파이썬! 4

2. 람다 함수

  • 람다 함수(Lambda Function): 파이썬에서 익명의 간단한 함수를 생성하기 위한 특별한 구문입.
  • "익명의 함수": 함수에 고유한 이름이 지정되지 않았음을 의미.
  • 한 줄로 표현되는 짧고 간결한 함수를 생성할 때 주로 사용.
lambda 매개변수: 표현식

간결성: 람다 함수는 간단한 연산이나 작은 기능을 가진 함수를 간결하게 표현하는 데 유용.
익명성: 람다 함수에는 명시적인 이름이 부여되지 않는다. 그러나 필요에 따라 변수에 할당할 수 있다.
일회성: 일반적으로 특정 작업을 위한 일회성 함수로 사용된다.
def square(x):
    return x**2

print(square(5))

square = lambda x: x**2 # lambda는 무조건 리턴형

print(square(5))

(lambda x: x**2)(5)
25
25
25
people = [
    {'name':'오렌지', 'age':30},
    {'name':'김사과', 'age':20},
    {'name':'반하나', 'age':25}
]

def sort_age(x):
    return x['age'] #{'name':'오렌지', 'age':30}

people[0]
print(sort_age(people[0]))
30
sorted_people = sorted(people, key=sort_age) 
# 기본: 오름차순, sort_age()→이렇게 쓰지 않은 것은 주소값을 넣었기 때문.
print(sorted_people)
[{'name': '김사과', 'age': 20}, {'name': '반하나', 'age': 25}, {'name': '오렌지', 'age': 30}]
sorted_people = sorted(people, key=sort_age, reverse=True)
print(sorted_people)
[{'name': '오렌지', 'age': 30}, {'name': '반하나', 'age': 25}, {'name': '김사과', 'age': 20}]
sorted_people = sorted(people, key=lambda x: x['age']) # lambda -> 함수를 일회용으로 사용하기 위함.
print(sorted_people)
[{'name': '김사과', 'age': 20}, {'name': '반하나', 'age': 25}, {'name': '오렌지', 'age': 30}]

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

3-1. filter 함수

  • filter(): 파이썬의 내장 함수
  • 주어진 함수의 조건을 만족하는 항목만으로 이루어진 이터레이터를 반환한다.
  • 주로 리스트나 다른 순차적인 데이터 타입에서 특정 조건을 만족하는 항목들만을 필터링할 때 사용된다.
li = [2, 5, 7, 10, 15, 17, 20, 22, 25, 28]

def even(n):
    if n%2 == 0:
        return True
    else:
        return False

result = list(filter(even, li)) # # filter(even, li) 객체를 리스트로 변환
print(result)
[2, 10, 20, 22, 28]
result = list(filter(lambda n: n%2 == 0, li))
print(result)
[2, 10, 20, 22, 28]

3-2. map 함수

  • map(): 파이썬의 내장 함수
  • 주어진 함수를 이터러블의 모든 항목에 적용하여 결과를 반환하는 이터레이터를 생성한다.
  • 주로 리스트나 다른 순차적인 데이터 타입의 항목 각각에 함수를 적용할 때 사용된다.
num = [1, 2, 3, 4, 5]
squared_num = list(map(lambda x: x**2, num))
print(squared_num)
[1, 4, 9, 16, 25]
li1 = [1, 2, 3]
li2 = [4, 5, 6]
sum = list(map(lambda x, y: x+y, li1, li2))
print(sum)
[5, 7, 9]
words = ['apple', 'banana', 'orange', 'cherry']
upper_words = list(map(lambda x: x.upper(), words))
print(upper_words)
['APPLE', 'BANANA', 'ORANGE', 'CHERRY']

→ map() 함수는 결과를 이터레이터 형태로 반환하기 때문에
그 결과를 직접 출력, 인덱싱, 슬라이싱하기 위해서는 list()나 비슷한 함수를 사용하여
이터레이터를 실제 리스트나 다른 데이터 구조로 변환해야 한다.

profile
The light shines in the darkness.

0개의 댓글