inblog logo
|
devleekangho
    파이썬

    [Python] 어노테이션을 활용, 데코레이터 사용

    KangHo Lee's avatar
    KangHo Lee
    Jun 05, 2025
    [Python] 어노테이션을 활용, 데코레이터 사용
    Contents
    🔍 코드 설명🧠 결과 예시✅ 요약
    이 코드는 파이썬 데코레이터의 대표적인 사용 예로, 함수의 실행 시간을 측정하는 데코레이터를 직접 구현한 것입니다.

    # decorator.py import time def elapsed(original_func): # 기존 함수를 인수로 받는다. def wrapper(): start = time.time() result = original_func() # 기존 함수를 수행한다. end = time.time() print("함수 수행시간: %f 초" % (end - start)) # 기존 함수의 수행시간을 출력한다. return result # 기존 함수의 수행 결과를 리턴한다. return wrapper @elapsed def myfunc(): print("함수가 실행됩니다.") # decorated_myfunc = elapsed(myfunc) # @elapsed 데코레이터로 인해 불필요한 코드 # decorated_myfunc() myfunc()

    🔍 코드 설명

    1. elapsed 함수 (데코레이터 함수)

    def elapsed(original_func):
    • original_func: 데코레이터가 감쌀 대상 함수입니다 (myfunc).

    2. 내부 함수 wrapper()

    def wrapper(): start = time.time() # 시작 시간 측정 result = original_func() # 원래 함수 실행 end = time.time() # 끝 시간 측정 print("함수 수행시간: %f 초" % (end - start)) # 실행 시간 출력 return result # 원래 함수의 결과 반환
    • wrapper()는 클로저로 original_func를 기억하고, 감싸서 실행하는 역할을 합니다.

    3. 데코레이터 적용

    @elapsed def myfunc(): print("함수가 실행됩니다.")
    • 이 줄은 다음과 동일합니다:
      • myfunc = elapsed(myfunc)

    4. 실행

    myfunc()
    • 실제로 실행되는 함수는 wrapper()입니다.
    • 하지만 wrapper() 안에서 original_func()가 호출되므로 myfunc 본래 기능도 실행됩니다.

    🧠 결과 예시

    함수가 실행됩니다. 함수 수행시간: 0.000012 초

    ✅ 요약

    구분
    설명
    @elapsed
    myfunc을 elapsed(myfunc)으로 감쌈
    wrapper()
    시간 측정 + 원래 함수 실행
    myfunc() 호출
    실제로는 wrapper() 실행됨

    Share article
    Contents
    🔍 코드 설명🧠 결과 예시✅ 요약

    devleekangho

    RSS·Powered by Inblog