Day 5 call back 함수 및 lambda 함수
2023. 3. 9. 17:04ㆍ파이썬
1. 콜백함수(CallBack Function)¶
- 직접 호출하는 것이 나닌 다른 함수에 의해 호출되는 함수
In [ ]:
def callback_func(func):#함수의 주소값을 보냄
for i in range(5):
func() #그 주소에 있는 함수를 실행하라.
def print_hello():
print('안녕하세요! 파이썬')
In [ ]:
# 함수의 이름을 보내는 것 (소괄호 X)
callback_func(print_hello)
# 가능한 이유: 파이썬에서는 함수도 객체로 되어 있어서 주소화 되어있다.
안녕하세요! 파이썬 안녕하세요! 파이썬 안녕하세요! 파이썬 안녕하세요! 파이썬 안녕하세요! 파이썬
In [ ]:
#예제
def callback_func(func,num):
for i in range(num):
func(i)
def print_hello(num):
print('안녕하세요 파이썬!',num)
In [ ]:
callback_func(print_hello,10)
안녕하세요 파이썬! 0 안녕하세요 파이썬! 1 안녕하세요 파이썬! 2 안녕하세요 파이썬! 3 안녕하세요 파이썬! 4 안녕하세요 파이썬! 5 안녕하세요 파이썬! 6 안녕하세요 파이썬! 7 안녕하세요 파이썬! 8 안녕하세요 파이썬! 9
2. 람다 함수(lambda Function)¶
- 단일문으로 표현되는 익명함수
코드상에서 한번만 사용되는 기능이 있을 때, 굳이 함수를 만들지 않고 일회성으로 만들어 사용(함수는 클래스를 통해 생성된 객체)
무조건 Return 형
In [ ]:
def square(x):
return x **2
In [ ]:
print(square(4))
16
In [ ]:
# 사용법
# lambda 매개변수 : 리턴할 코드
lambda x: x ** 2
Out[ ]:
<function __main__.<lambda>(x)>
In [ ]:
square = lambda x: x ** 2
print(square(4))
print(square(5))
# 굳이 왜 그렇게 쓸까?
# 이렇게 안쓴다. square에 담는 것 X
16 25
In [ ]:
(lambda x: x ** 2)(4)
Out[ ]:
(<function __main__.<lambda>(x)>, 4)
In [ ]:
def mydata(string):
return len(string.strip()) #공백제거후 숫자세기
In [ ]:
mydata(' apple ')
Out[ ]:
5
In [ ]:
data = ['watermelon',' apple ',' banana ','avocado']
print(sorted(data))
[' apple ', ' banana ', 'avocado', 'watermelon']
In [ ]:
# sorted(데이터, key = 정렬기준(함수도 가능))
print(sorted(data,key = mydata))
[' apple ', ' banana ', 'avocado', 'watermelon']
In [ ]:
# 람다 함수를 사용하여 위 예제를 변경
print(sorted(data, key = lambda string : len(string.strip())))
[' apple ', ' banana ', 'avocado', 'watermelon']
2-1. 람다가 유용하게 사용되는 대표적인 함수¶
fliter
map
In [ ]:
# filter() : 특정 조건을 만족하는 요소만 남기고 필터링
li = [1,2,3,4,7,9,10,14,15,19,20]
# print(fliter(lambda n : n%2 ==0, li))
result = list(filter(lambda n : n%2 ==0,li))
print(result)
[2, 4, 10, 14, 20]
In [ ]:
def even(n):
if n%2 == 0:
return True
else:
return False
In [ ]:
result = list(filter(even,li))
print(result)
result = list(filter(even,li))
#fliter가 콜백 함수여서 even이라는 함수를 호출해줌
[2, 4, 10, 14, 20]
In [ ]:
# map(): 각 원소를 주어진 수식에 따라 변현하여 새로운 값을 반환
li = [1,2,3,4,7,9,10,14,15,19,20]
per = list(map(lambda n : n * 0.01, li))
print(per)
[0.01, 0.02, 0.03, 0.04, 0.07, 0.09, 0.1, 0.14, 0.15, 0.19, 0.2]
In [ ]:
def percent(n):
return n * 0.01
In [ ]:
li = [1,2,3,4,7,9,10,14,15,19,20]
per = list(map(percent, li))
print(per)
[0.01, 0.02, 0.03, 0.04, 0.07, 0.09, 0.1, 0.14, 0.15, 0.19, 0.2]
728x90
'파이썬' 카테고리의 다른 글
Day 6 모듈 (0) | 2023.03.10 |
---|---|
Day 5 객체지향과 클래스 (0) | 2023.03.09 |
Day 4~5 사용자 정의 함수 및 변수의 범위 (0) | 2023.03.09 |
Day 3-2 제어문 (조건문, 반복문) (0) | 2023.03.07 |
Day 3-1 튜플 (0) | 2023.03.07 |