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 , 5)
callback_func(print_hi, 3)
더보기
푸바오 0
푸바오 1
푸바오 2
푸바오 3
푸바오 4
대나무 0
대나무 1
대나무 2

 

 

2. 람다 함수(Lambda Function)

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

lambda arguments: expression

arguments: 람다 함수에 전달되는 인자들입니다.

expression: 반환할 표현식입니다.  표현식의 값이 람다 함수가 호출될  반환됩니다.

 

간결성: 람다 함수는 간단한 연산이나 작은 기능을 가진 함수를 간결하게 표현하는 데 유용합니다.

익명성: 람다 함수에는 명시적인 이름이 부여되지 않습니다. 그러나 필요에 따라 변수에 할당할 수 있습니다.

일회성: 일반적으로 특정 작업을 위한 일회성 함수로 사용됩니다.

 

def square(x):
  return x**2

print(square(4))

 

 

squre = lambda x : x**2 # x : 표현 // ex) 4 : 4**2
print(square(4))
print(square(5))
print((lambda x: x ** 2)(4))
더보기
16
25
16

 

 

비교

def return_age(x):
    return x['age'] # x의 age를 꺼내서 입력
    
people = [{'name': '푸바오', 'age': 3}, {'name': '후이바오', 'age': 1}, {'name': '루이바오', 'age': 1}]
sorted_people = sorted(people, key=return_age)
print(sorted_people)
people = [{'name': '푸바오', 'age': 3}, {'name': '후이바오', 'age': 1}, {'name': '루이바오', 'age': 1}]
sorted_people = sorted(people, key=lambda x: x['age']) # age 오름차순
print(sorted_people) # 람다는 메모리에 저장되지 않음

 

 

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

3-1. filter 함수

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

 

function: 각 항목에 적용되는 함수. 이 함수는 하나의 인자를 받아 참(True) 또는 거짓(False)을 반환합니다.

iterable: 필터링  이터러블 객체 (: 리스트, 튜플, 문자열 )

 

li = [2, 5, 7, 10, 15, 17, 20, 22, 25, 28]


def even(n):
    if n%2 == 0:
        return True
    else:
        return False
        
# filter(함수값, 데이터) True만 출력
result = list(filter(even, li)) #True일때만 필터에서 바깥으로 내보냄
print(result) # True값만 가진 요소만 라스트로 만들어냄

 

# 람다로 간결한 함수로 생성

li = [2, 5, 7, 10, 15, 17, 20, 22, 25, 28]
result2 = list(filter(lambda n : n%2==0, li)) #람다로 익명의 함수를 생성
print(result2)

 

3-2. map 함수

map(각각 어떻게 바꿀 것인가, [바꿀 입력 값])
  • map()는 파이썬의 내장 함수로, 주어진 함수를 이터러블의 모든 항목에 적용하여 결과를 반환하는 이터레이터를 생성
  • 이 함수는 주로 리스트나 다른 순차적인 데이터 타입의 항목 각각에 함수를 적용할 때 사용됩니다.
  • map() 함수는 여러 개의 이터러블을 동시에 처리할 수 있습니다.

function: 각 항목에 적용될 함수.

iterable: function 의해 처리될 이터러블 객체(: 리스트, 튜플, 문자열 ). map() 함수는 여러 개의 이터러블을 동시에 처리할  있습니다.

 

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, 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를 x y에 각각뽑아서 입력해줌
print(summed)
더보기
[5, 7, 9]

 

# map은 여러개의 이터러블을 동시에 처리
words = ["apple", "banana", "cherry"]
uppercase_words = list(map(str.upper, words)) # str.upper : 대문자 변환
print(uppercase_words)
더보기
['APPLE', 'BANANA', 'CHERRY']

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

16. 파이썬 상속  (0) 2023.12.12
15. 객체지향과 클래스  (1) 2023.12.11
13. 변수의 범위  (1) 2023.12.11
12. 사용자 정의 함수  (1) 2023.12.10
11. 컬렉션과 반복문  (1) 2023.12.10