L'ordre d'appel de plusieurs décorateurs en Python

高洛峰
Libérer: 2017-02-17 11:01:19
original
1098 Les gens l'ont consulté

Avant-propos

Le décorateur est une fonction souvent utilisée dans le développement de programmes, et c'est aussi la connaissance de base du développement du langage Python. Si les décorateurs peuvent être utilisés raisonnablement dans le programme, cela peut non seulement améliorer l'efficacité du développement, mais aussi Cela peut rendre le code que vous écrivez plus sophistiqué ^_^

Scénarios d'utilisation

Il existe de nombreux endroits où les décorateurs peuvent être utilisés. Un exemple simple est le scénario suivant

<.>
  • Présentation des journaux

  • Statistiques du temps d'exécution de la fonction

  • Traitement préparatoire avant l'exécution de la fonction

  • Fonction de nettoyage après l'exécution de fonctions

  • Vérification des autorisations et autres scénarios

  • Cache

Cas du décorateur

def user_login(fun):
    def islogin(request,*args,**kwargs):
        context = {}
        if request.session.has_key('uname'):
            context['uname'] = request.session.get('uname')
        else:
            context['uname'] = 'None'
        return fun(request,context,*args,**kwargs)
    return islogin
Copier après la connexion

@user_login
def ucOrder(request,context,pIndex):
    '''
    获取数据
    处理数据
    传递到页面上去
Copier après la connexion
Ce qui précède est un cas d'utilisation de décorateurs dans une application de commerce électronique simple, dans laquelle la fonction ucOrder ne peut être exécutée qu'après la connexion de l'utilisateur . Si vous n'utilisez pas de décorateur, l'approche courante peut consister à écrire un tas de codes de vérification dans ucOrder pour déterminer si l'utilisateur est connecté, puis à déterminer la logique d'exécution ultérieure, ce qui est plus gênant.

Ensuite, c'est relativement simple après avoir utilisé le décorateur. Il vous suffit de suivre le format du décorateur et d'ajouter @user_login à la fonction ucOrder. Ensuite, lorsque l'interpréteur python sera exécuté, il l'expliquera de haut en bas. en bas. Le code exécute d'abord la fonction user_login et passe ucOrder comme paramètre de la fonction user_login, ce qui est équivalent à user_login(ucOrder). Cela sert de fonction pour vérifier si l'utilisateur est connecté, puis décider s'il doit être exécuté. la fonction ucOrder

La séquence d'appel utilisée par plusieurs décorateurs

def one(func):
    print('----1----')
    def two():
        print('----2----')
        func()
    return two

def a(func):
    print('----a----')
    def b():
        print('----b----')
        func()
    return b

@one
@a
def demo():
    print('----3----')

demo()
Copier après la connexion
Résultats de l'exécution :

/usr/bin/python2.7 /home/python/Desktop/tornadoProject/one.py
----a----
----1----
----2----
----b----
----3----
Copier après la connexion
Vous pouvez voir dans les résultats de l'exécution que si plusieurs décorateurs sont utilisés , c'est L'ordre d'exécution est encore un peu bizarre, pourquoi ?

Concernant ce problème, il existe de meilleurs articles pour expliquer, les mythes sur l'ordre d'exécution du décorateur Python


Plus d'ordre d'appel de décorateur multiple Python Pour les articles connexes, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
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