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 |