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 !