728x90
반응형
SMALL

1. 콜백함수(Callback Function)★

  • 직접 호출하는 것이 아닌 다른 함수에 의해 호출되는 함수
 

 
 
def callback_func(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 + 1)

def print_hello(num):
    print('안녕하세요 파2썬!', num)

def print_hi(num):
    print(f'hi 파3썬 {num}트')
 
 

 
 
callback_func(print_hello, 3)
 
안녕하세요 파2썬! 1
안녕하세요 파2썬! 2
안녕하세요 파2썬! 3
 
 

 
 
callback_func(print_hi, 5)
 
hi 파3썬 1트
hi 파3썬 2트
hi 파3썬 3트
hi 파3썬 4트
hi 파3썬 5트
 
 

2. 람다 함수(Lambda Function)

  • 단일문으로 표현되는 익명함수
  • 코드상에서 한번만 사용되는 기능이 있을 때, 굳이 함수를 만들지 않고 1회성으로 함수를 만들어 사용 (함수는 클래스를 통해 생성된 객체)
  • 무조건 return형
 

 
 
def square(x):
    return x **2
 
 

 
 
print(square(4))
 
16
 

 
 
lambda x: x ** 2
 
<function __main__.<lambda>(x)>
 
 

 
 
# 이렇게 안쓴다 ㅋㅋ
square = lambda x: x ** 2 
# 전체가 객체라는것을 보여주기 위해서 이렇게 씀
 
 

 
 
print(square(4))
 
16
 

 
 
print(square(5))
 
25
 
 

 
 
(lambda x: x ** 2)(4) # 이것도 잘안씀
 
16
 
 

 
 
def myData(string):
    return len(string.strip())
# 앞뒤공백 제거후 길이를 세주는 함수
 
 

 
 
print(myData('apple'))
print(myData('    apple      '))
 
5
5
 

 
 
data = ['watermelon', '         apple         ', '     banana', '   avocado   ']
 
 

 
 
print(sorted(data))
 
['         apple         ', '     banana', '   avocado   ', 'watermelon']
 

 
 
# mydata 함수를 적용해서 data리스트에서 sorted 해주는것
print(sorted(data, key=myData))
 
['         apple         ', '     banana', '   avocado   ', 'watermelon']
 
 

 
 
# 람다함수를 사용하여 위 예제를 변경
print(sorted(data, key=lambda string: len(string.strip())))
# data의 갯수(4) 만큼 매개변수string에 대입 해서 sort해서 출력하는 식
 
['         apple         ', '     banana', '   avocado   ', 'watermelon']
 
 

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

 

 
 
# filter(): 특정 조건을 만족하는 요소만 남기고 필터링
# 트루일때만 남기게 됌

li = [1, 2, 3, 4, 7, 9, 10, 14, 15, 19, 20]

# print(filter(lambda n: n % 2 == 0, li))

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

 
[2, 4, 10, 14, 20]
 
 

 
 
# 위에 람다랑 같은 역할의 함수
# 위에서 True False로 리턴해주었기때문에 함수에서도 bool형으로
def even(n):
    if n % 2 == 0:
       return True
    else:
        return False
 
 

 
 
# filter가 콜백함수이기때문에 even 함수에 ()를 사용안하였다.
result = list(filter(even, li))
print(result)
 
[2, 4, 10, 14, 20]
 
 

 
 
 
 
 
 
[0.01, 0.02, 0.03, 0.04, 0.07, 0.09, 0.1, 0.14, 0.15, 0.19, 0.2]
 
 

 
 
 
 
 
 

 
 
 
 
 
 
[0.01, 0.02, 0.03, 0.04, 0.07, 0.09, 0.1, 0.14, 0.15, 0.19, 0.2]

 

728x90
반응형
LIST

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

객체 지향과 클래스  (0) 2023.03.10
랜덤 모듈  (0) 2023.03.09
변수의 범위  (0) 2023.03.09
사용자 정의 함수(함수만들기)  (0) 2023.03.09
세트(set)  (0) 2023.03.08

+ Recent posts