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))
16
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 |