본문 바로가기
파이썬

콜백 함수/람다함수/재귀호출

by 코낄2 2023. 9. 12.

1. 콜백함수(callback function)

파이썬에서 콜백 함수는 다른 함수에 의해 호출되는 함수를 가리킵니다. 이것은 일반적으로 함수를 인수로 전달하고, 특정 조건이나 이벤트가 발생했을 때 해당 함수를 호출하는 방식으로 작동합니다. 콜백 함수는 다양한 프로그래밍 시나리오에서 사용되며, 주로 이벤트 처리, 비동기 작업, 사용자 인터페이스 처리 등에 활용됩니다.

def print_hello(num):
    print('안녕하세요! 파이썬!', num)
 
def callback_func(func,num):
    for i in range(num):
        func(i)
 
callback_func(print_hello,3)
>> 안녕하세요! 파이썬! 0
     안녕하세요! 파이썬! 1
     안녕하세요! 파이썬! 2
# 콜백 함수 정의
def my_callback_function(name):
    print(f"안녕하세요, {name}!")

# 다른 함수 정의
def greet_with_callback(callback, name):
    print("인사를 시작합니다.")
    callback(name)  # 콜백 함수 호출
    print("인사가 끝났습니다.")

# greet_with_callback 함수 호출
greet_with_callback(my_callback_function, "Alice")

2. 람다 함수(Lambda Function)

# 간단한 람다 함수 예제
add = lambda x, y: x + y
result = add(3, 5)  # 결과는 8입니다.
 
print((lambda x: x ** 2)(4))
>> 16

# 다른 함수의 인수로 람다 함수 사용
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
# squared는 [1, 4, 9, 16, 25]로 변환됩니다.
 
people = [{'name': '김사과', 'age': 20}, {'name': '반하나', 'age': 25}, {'name': '오렌지', 'age': 30}]
sorted_people = sorted(people, key=lambda x: x['age'])
# key값 age를 기준으로 오름차순
print(sorted_people)
>> [{'name': '김사과', 'age': 20}, {'name': '반하나', 'age': 25}, {'name': '오렌지', 'age': 30}]

3. 람다가 유용하게 사용되는 함수들

(1) filter 함수

파이썬의 filter 함수는 주어진 함수를 사용하여 반복 가능한(iterable) 객체(예: 리스트, 튜플, 집합 등)의 요소를 걸러내는 역할을 합니다. filter 함수는 조건을 만족하는 요소만을 남기고, 조건을 만족하지 않는 요소는 제거하여 새로운 iterable 객체를 반환합니다. 반환된 결과는 필터링된 요소들로 이루어진 이터레이터(iterator)이므로, 필요에 따라 리스트나 다른 자료형으로 변환해야 할 수 있습니다.

filter(function, iterable)

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

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

 

def is_even(num):
    return num % 2 == 0

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
even_numbers = list(filter(is_even, numbers))
print(even_numbers)  # [2, 4, 6, 8, 10]
 
li = [2, 5, 7, 10, 15, 17, 20, 22, 25, 28]
 
result = list(filter(lambda x: x%2 == 0, li))
print(result)
 >> [2, 10, 20, 22, 28]

(2) map 함수

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, 4]
list2 = [4, 5, 6]        # 더 적은 개수에 맞춰서 실행
summed = list(map(lambda x, y: x + y, list1, list2))
print(summed)
>> [5, 7, 9]
 
words = ["apple", "banana", "cherry"]
uppercase_words = list(map(str.upper, words))
print(uppercase_words)
>> ['APPLE', 'BANANA', 'CHERRY']

4. 재귀 호출(recursive call)

재귀 호출(recursion) 함수가 자기 자신을 다시 호출하는 기법을 말합니다. 재귀 호출을 사용하면 복잡한 문제를 간단하고 우아하게   있지만, 잘못 사용하면 프로그램의 성능에 문제가 발생할  있습니다.

*** 스택구조 : 차례대로 쌓이고 데이터를 뽑을땐 마지막에(최근에) 쌓인 데이터부터 사용

def factorial(num):
    if num > 1:
        return num *factorial(num - 1)
    else:
        return num
정수 n을 입력받아 아래와 같이 처리하는 프로그램을 만들어보자.
* n이 홀수면 3*n+1을 함
* n이 짝수면 n을 2로 나눔
* n이 결국 1이 될 때까지 위 조건을 반복실행
 
def func(n):
    print(n)
    if n == 1:
        return '끝'
    if n % 2 == 1:
        return (func((3*n) + 1))
    else:
        return (func(int(n / 2)))


num = int(input('n을 입력하세요'))
func(num)

***변수의 범위(scope)

파이썬에서 변수의 범위(scope) 해당 변수가 프로그램 내에서 참조되고 변경될  있는 영역 의미합니다파이썬의 변수 범위는 크게  가지로 분류됩니다.  변수의 범위 탐색 순서로 지역 범위에 동일한 이름의 변수가 없으면 파이썬은 둘러싼 범위를 확인하고, 그 다음으로 전역 범위, 마지막으로 내장 범위를 확인합니다.

1. Local(지역): Local scope 변수가 함수 내에서 정의될  해당 함수 내부를 의미합니다.

2. Enclosing(둘러싼 범위): Enclosing scope 내부 함수에서 외부 함수의 변수를 참조할  해당 외부 함수 범위를 의미합니다.

3. Global(전역 범위): Global scope 변수가 스크립트의 최상위 수준에서 정의될  전체 스크립트 파일 내에서 해당 변수를 의미합니다.

4. Built-in(내장 범위):

Built-in scope 파이썬의 내장 함수와 모듈들이 속하는 범위입니다. 예를 들어, print(), len() 같은 함수들이 여기에 해당됩니다.

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

상속  (0) 2023.09.13
객체지향과 클래스  (0) 2023.09.12
사용자 정의 함수  (0) 2023.09.10
제어문-반복문  (0) 2023.09.08
제어문- 조건문  (0) 2023.09.07