> 백엔드 개발 > 파이썬 튜토리얼 > Python 데코레이터 이해: 예제가 포함된 초보자 가이드

Python 데코레이터 이해: 예제가 포함된 초보자 가이드

Barbara Streisand
풀어 주다: 2025-01-27 16:12:11
원래의
818명이 탐색했습니다.

Understanding Python Decorators: A Beginner’s Guide with Examples

Python 데코레이터: 초보자 가이드 및 예제

Python 데코레이터는 함수나 메서드의 동작을 수정하기 위한 강력하고 다양한 도구입니다. 이를 통해 구조를 변경하지 않고도 기존 코드에 기능을 추가할 수 있습니다. 이 기사에서는 데코레이터를 심층적으로 살펴보고 이를 효과적으로 이해하고 사용하는 데 도움이 되는 간단한 예제를 제공합니다.


데코레이터란 무엇인가요?

Python의 데코레이터는 본질적으로 다른 함수를 인수로 받아 해당 동작을 확장하거나 변경하는 함수입니다. 데코레이터는 일반적으로 기존 함수나 메서드에 로깅, 액세스 제어, 메모, 유효성 검사와 같은 기능을 추가하는 데 사용됩니다.

Python의 데코레이터는 @decorator_name 구문을 사용하여 함수 정의에 적용됩니다.


데코레이터의 구조

기본 데코레이터 함수의 구조는 다음과 같습니다.

def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        # 在原始函数执行之前的代码
        result = original_function(*args, **kwargs)
        # 在原始函数执行之后的代码
        return result
    return wrapper_function
로그인 후 복사

데코레이터 적용

@decorator_name 구문을 사용하거나 수동으로 함수에 데코레이터를 적용할 수 있습니다.

@decorator_function
def some_function():
    print("这是原始函数。")

# 等同于:
# some_function = decorator_function(some_function)
로그인 후 복사

예시 1: 기본 데코레이터

함수 실행 전후에 메시지를 인쇄하는 간단한 데코레이터를 만들어 보겠습니다.

def simple_decorator(func):
    def wrapper():
        print("函数调用之前。")
        func()
        print("函数调用之后。")
    return wrapper

@simple_decorator
def say_hello():
    print("Hello, World!")

say_hello()
로그인 후 복사

출력:

<code>函数调用之前。
Hello, World!
函数调用之后。</code>
로그인 후 복사

예 2: 매개변수가 있는 데코레이터

매개변수를 다른 함수로 래핑하여 매개변수를 받아들이는 데코레이터를 만들 수 있습니다.

def repeat_decorator(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat_decorator(3)
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")
로그인 후 복사

출력:

<code>Hello, Alice!
Hello, Alice!
Hello, Alice!</code>
로그인 후 복사

데코레이터의 실제 응용

데코레이터는 실제 시나리오에서 널리 사용됩니다. 다음은 몇 가지 단순화된 실제 예입니다.

1. 사용자 작업 기록

데코레이터를 사용하면 사용자가 작업을 수행할 때마다 기록할 수 있습니다.

def log_action(func):
    def wrapper(*args, **kwargs):
        print(f"操作:正在执行 {func.__name__}。")
        return func(*args, **kwargs)
    return wrapper

@log_action
def upload_file(filename):
    print(f"正在上传 {filename}...")

upload_file("report.pdf")
로그인 후 복사

출력:

<code>操作:正在执行 upload_file。
正在上传 report.pdf...</code>
로그인 후 복사

2. 실행 시간 추적

작업을 실행하는 데 걸리는 시간을 추적하면 성능 모니터링에 유용합니다.

import time

def track_time(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 执行耗时 {end - start:.2f} 秒。")
        return result
    return wrapper

@track_time
def download_file(file_size):
    time.sleep(file_size / 10)  # 模拟下载时间
    print("下载完成。")

download_file(50)
로그인 후 복사

출력:

<code>下载完成。
download_file 执行耗时 5.00 秒。</code>
로그인 후 복사

3. 사용자 인사말 추가

데코레이터는 동적 요소를 추가하여 인사말을 개인화할 수 있습니다.

def add_greeting(func):
    def wrapper(name):
        print("您好,欢迎!")
        func(name)
    return wrapper

@add_greeting
def show_user_profile(name):
    print(f"用户资料:{name}")

show_user_profile("Alice")
로그인 후 복사

출력:

<code>您好,欢迎!
用户资料:Alice</code>
로그인 후 복사

핵심사항

  • 데코레이터는 함수나 메소드의 동작을 수정하는 강력한 방법입니다.
  • 로깅, 타이밍, 개인화 등 반복적인 작업을 단순화합니다.
  • @decorator 구문을 사용하여 쉽게 적용할 수 있습니다.
  • 데코레이터는 매개변수를 허용하고 중첩되어 유연성을 높일 수 있습니다.

데코레이터를 마스터하면 간결하고 효율적인 Python 코드를 작성하는 데 유용한 도구를 얻을 수 있습니다. 개념을 익히기 위해 제공된 예제를 시험해 보세요!

위 내용은 Python 데코레이터 이해: 예제가 포함된 초보자 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿