Maison  >  Article  >  développement back-end  >  Que sont les décorateurs python ? Comment l'utiliser ?

Que sont les décorateurs python ? Comment l'utiliser ?

不言
不言avant
2018-12-30 10:57:363251parcourir

Cet article vous explique qu'est-ce qu'un décorateur python ? Comment l'utiliser ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Dans le processus d'apprentissage de Python, je crois que tout le monde a une vague notion de décorateur. J'ai été confus pendant longtemps et j'ai décidé d'écrire un article pour faire le tri.

Tout d'abord, nous devons comprendre ce qu'est un décorateur :

En termes simples, un décorateur peut être compris comme une fonction qui enveloppe une fonction, ajoutant des fonctionnalités lorsque la fonction est en cours d'exécution. Cela n'affecte pas le contenu original de cette fonction et vous pouvez également effectuer un travail de nettoyage après l'exécution de la fonction.

Donnez un petit exemple

@func1
def func2():
    pass

Ce que fait le décorateur est de func1(func2) transmettre un objet fonction à notre décorateur, puis d'exécuter le contenu du décorateur func1 d'abord, puis exécuter la fonction func2.

Par exemple, prenons l'exemple d'un décorateur commun

#普通装饰器
def func1(func):
    def add_func():
        print('这是我要添加的功能')
        return func()
    return add_func

@func1
def func2():
    print('hello world')

#func1装饰器函数
#func2被装饰的函数
>>>func2()
这是我要添加的功能
hello world

Dans ce code, func2() est équivalent à func1(func2)()->add_func(), puis que vous souhaitez exécuter Lorsque vous utilisez la fonction func2(), la fonction décorateur func1() est exécutée en premier et le paramètre func est équivalent à func2(). Lors de l'exécution de la fonction func1, puisque la valeur de retour est add_func, nous exécutons func1(func2)(), ce qui équivaut à exécuter add_func(), en affichant
'Ceci est la fonction que j'ai ajoutée' et en renvoyant un func() fonction. C'est-à-dire l'appel du paramètre func, c'est-à-dire l'appel de la fonction func2 correspondante.

Cadre de base des décorateurs

def func1(func):
    def func2():

        return func()
    return func1()

Avancé

Créons un décorateur avec des paramètres

def func1(func):
    def func2(a,b):
        a=1
        b=2
        return func(a,b)
    return func()
@func1
def func(x,y)
    print('this is a add func')
    print(x+y)

>>>func(10,20)
this is a add func
3

Les paramètres de la fonction décorée dans ce code sont passés aux variables de la fonction décorée, c'est-à-dire que x est passé à a, y est passé à b, return func(a,b) C'est-à-dire , la fonction func est appelée et les paramètres de la fonction sont a et b.

Une fonction de décorateur plus avancée avec des paramètres (haha, ne vous sentez pas un peu confus)

def arg_func(arg):
    def _func(func):
        def _func1():
            if arg=='good':
                print('出去玩')
            if arg=='bad':
                print('不出去玩')
            return func()
        return _func1
    return _func

@arg_func('bad')
def func():
    print('bad day')
@arg_func('good')
def func1()
    print('good day')

>>>func()
不出去玩
bad day
>>>func1()
出去玩
good day

Ce code est en fait très simple, c'est-à-dire que le décorateur a un paramètre supplémentaire Le jugement semble facile à comprendre. De même, lors de l'exécution de la fonction de réception du décorateur func (arg_func), le paramètre est mauvais. Lors de l'exécution de la fonction func1, le paramètre recevant la fonction du décorateur est bon

.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer