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

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

不言
Libérer: 2018-12-30 10:57:36
avant
3254 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal