Maison  >  Article  >  développement back-end  >  Comment utiliser les fonctions de décorateur en Python

Comment utiliser les fonctions de décorateur en Python

PHPz
PHPzoriginal
2023-10-19 09:10:481262parcourir

Comment utiliser les fonctions de décorateur en Python

Comment utiliser la fonction décorateur en Python

En programmation Python, les décorateurs sont un outil très utile. Cela nous permet d'étendre la fonction avec des fonctionnalités supplémentaires sans modifier le code de fonction d'origine. Les fonctions de décorateur peuvent effectuer automatiquement certaines opérations avant et après l'exécution de la fonction, telles que la journalisation, la synchronisation, la vérification des autorisations, etc. Cet article présentera les concepts de base des fonctions de décorateur et fournira quelques exemples de code concrets.

1. Définition de la fonction décorateur

Une fonction décorateur est une fonction qui accepte une fonction comme paramètre et renvoie une nouvelle fonction. Il peut être appliqué aux fonctions utilisant la syntaxe @. Voici un exemple de définition simple d'une fonction de décorateur :

def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        # 在函数执行前的操作
        print("Before executing the function")
        # 执行原始函数
        result = original_function(*args, **kwargs)
        # 在函数执行后的操作
        print("After executing the function")
        return result
    return wrapper_function

2. Application de la fonction de décorateur

Une fonction de décorateur peut effectuer certaines opérations supplémentaires avant et après l'exécution de la fonction. Voici un exemple d'utilisation d'une fonction décorateur pour implémenter une fonction de timing :

import time

def timer_decorator(original_function):
    def wrapper_function(*args, **kwargs):
        start_time = time.time()
        result = original_function(*args, **kwargs)
        end_time = time.time()
        execution_time = end_time - start_time
        print(f"Execution time: {execution_time} seconds")
        return result
    return wrapper_function

@timer_decorator
def my_function():
    time.sleep(1)
    print("Function executed")

my_function()

Dans l'exemple ci-dessus, la fonction décorateur timer_decorator est appliquée à la fonction my_function. Lorsque my_function est appelé, le décorateur enregistre l'heure de début avant l'exécution de la fonction, calcule l'heure de fin après l'exécution de la fonction et calcule le temps d'exécution de la fonction.

3. Paramètres de la fonction décorateur

La fonction décorateur peut accepter des paramètres pour appliquer différents décorateurs à différentes fonctions. Voici un exemple de fonction de décorateur avec des paramètres :

def prefix_decorator(prefix):
    def decorator_function(original_function):
        def wrapper_function(*args, **kwargs):
            print(f"{prefix}: Before executing the function")
            result = original_function(*args, **kwargs)
            print(f"{prefix}: After executing the function")
            return result
        return wrapper_function
    return decorator_function

@prefix_decorator("LOG")
def my_function():
    print("Function executed")

my_function()

Dans l'exemple ci-dessus, la fonction prefix_decorator renvoie une fonction de décorateur qui imprime les informations du journal avec le préfixe avant et après l'exécution de la fonction.

4. Application de plusieurs décorateurs

Plusieurs fonctions de décorateur peuvent être appliquées à la même fonction pour former un effet d'empilement de décorateurs. Voici un exemple d'application de plusieurs décorateurs :

def decorator1(original_function):
    def wrapper_function(*args, **kwargs):
        print("Decorator 1: Before executing the function")
        result = original_function(*args, **kwargs)
        print("Decorator 1: After executing the function")
        return result
    return wrapper_function

def decorator2(original_function):
    def wrapper_function(*args, **kwargs):
        print("Decorator 2: Before executing the function")
        result = original_function(*args, **kwargs)
        print("Decorator 2: After executing the function")
        return result
    return wrapper_function

@decorator1
@decorator2
def my_function():
    print("Function executed")

my_function()

Dans l'exemple ci-dessus, les fonctions de décorateur decorator1 et decorator2 sont appliquées à la fonction my_function en séquence. Lorsque my_function est appelé, le décorateur 2 sera exécuté après le décorateur 1.

Résumé :

La fonction Decorator est un outil très utile en Python, qui peut étendre la fonction avec des fonctions supplémentaires sans modifier le code de la fonction d'origine. En fournissant quelques exemples de code concrets, cet article espère aider les lecteurs à comprendre les concepts de base des fonctions de décorateur et comment les utiliser. L'utilisation des fonctions de décorateur réduit la duplication de code et rend le code plus modulaire et maintenable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn