함수 고급 기능

2025. 3. 26. 03:17Programming Languages/Python

함수 고급 기능

함수 객체

파이썬에서 함수는 일급 객체(first-class object)로, 다른 변수와 마찬가지로 할당, 전달, 반환할 수 있습니다.

def 인사(이름):
    return f"안녕하세요, {이름}님!"

# 함수를 변수에 할당
인사_함수 = 인사

# 할당된 변수를 통해 함수 호출
메시지 = 인사_함수("철수")
print(메시지)  # 출력: 안녕하세요, 철수님!

함수를 인수로 전달

def 적용_함수(함수, 값):
    """주어진 함수를 값에 적용하는 함수"""
    return 함수(값)

def 제곱(x):
    return x ** 2

def 세제곱(x):
    return x ** 3

# 함수를 인수로 전달
결과1 = 적용_함수(제곱, 5)
결과2 = 적용_함수(세제곱, 5)

print(결과1)  # 출력: 25
print(결과2)  # 출력: 125

함수 안에 함수 정의

def 외부_함수(x):
    """외부 함수"""
    def 내부_함수(y):
        """내부 함수"""
        return x + y
    
    return 내부_함수  # 내부 함수 반환

# 외부 함수 호출하여 내부 함수 객체 받기
더하기_5 = 외부_함수(5)

# 내부 함수 호출
결과 = 더하기_5(3)
print(결과)  # 출력: 8

클로저(Closure)

클로저는 함수 안에 함수를 정의하고, 그 내부 함수가 외부 함수의 지역 변수를 사용하는 경우를 말합니다.

def 카운터_생성():
    """카운터 함수를 생성하는 함수"""
    카운트 = 0
    
    def 카운트_증가():
        nonlocal 카운트
        카운트 += 1
        return 카운트
    
    return 카운트_증가

# 카운터 함수 생성
카운터 = 카운터_생성()

# 카운터 함수 호출
print(카운터())  # 출력: 1
print(카운터())  # 출력: 2
print(카운터())  # 출력: 3

데코레이터(Decorator)

데코레이터는 함수를 수정하지 않고 기능을 확장하는 방법입니다.

def 로그_데코레이터(함수):
    """함수 실행 전후에 로그를 출력하는 데코레이터"""
    def 래퍼(*args, **kwargs):
        print(f"함수 {함수.__name__} 실행 시작")
        결과 = 함수(*args, **kwargs)
        print(f"함수 {함수.__name__} 실행 완료")
        return 결과
    return 래퍼

# 데코레이터 적용
@로그_데코레이터
def 인사(이름):
    print(f"안녕하세요, {이름}님!")
    return f"{이름}님께 인사드렸습니다."

# 함수 호출
결과 = 인사("철수")
print(결과)
# 출력:
# 함수 인사 실행 시작
# 안녕하세요, 철수님!
# 함수 인사 실행 완료
# 철수님께 인사드렸습니다.



'Programming Languages > Python' 카테고리의 다른 글

함수 모듈화와 가져오기  (0) 2025.03.26
함수형 프로그래밍 기초  (0) 2025.03.26
함수 문서화(Documentation)  (0) 2025.03.26
내장 함수(Built-in Functions)  (0) 2025.03.26
재귀 함수(Recursive Functions)  (0) 2025.03.26