Maison >développement back-end >Tutoriel Python >L'ordre d'appel de plusieurs décorateurs en Python
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é ^_^
Il existe de nombreux endroits où les décorateurs peuvent être utilisés. Un exemple simple est le scénario suivant
<.>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
@user_login def ucOrder(request,context,pIndex): ''' 获取数据 处理数据 传递到页面上去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()Résultats de l'exécution :
/usr/bin/python2.7 /home/python/Desktop/tornadoProject/one.py ----a---- ----1---- ----2---- ----b---- ----3----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