Heim > Artikel > Backend-Entwicklung > Die Aufrufreihenfolge mehrerer Dekoratoren in Python
Dekorator ist eine Funktion, die häufig in der Programmentwicklung verwendet wird, und es handelt sich auch um Grundkenntnisse der Python-Sprachentwicklung. Wenn Dekoratoren im Programm sinnvoll eingesetzt werden können, kann dies nicht nur die Entwicklungseffizienz verbessern. Es kann aber auch dazu führen, dass der von Ihnen geschriebene Code anspruchsvoller aussieht ^_^
Es gibt viele Orte, an denen Dekoratoren verwendet werden können. Ein einfaches Beispiel ist das folgende Szenario
Einführung in Protokolle
Statistiken zur Funktionsausführungszeit
Vorbereitende Verarbeitung vor der Ausführung der Funktion
Reinigungsfunktion nach Ausführung von Funktionen
Berechtigungsüberprüfung und andere Szenarien
Cache
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): ''' 获取数据 处理数据 传递到页面上去
Das Obige ist ein Fall der Verwendung von Dekoratoren in einer einfachen E-Commerce-Anwendung, in der die ucOrder-Funktion erst ausgeführt werden kann, nachdem sich der Benutzer angemeldet hat . Wenn Sie keinen Dekorator verwenden, besteht der übliche Ansatz möglicherweise darin, eine Reihe von Bestätigungscodes in ucOrder zu schreiben, um festzustellen, ob der Benutzer angemeldet ist, und dann die anschließende Ausführungslogik zu bestimmen, was problematischer ist.
Dann ist es relativ einfach, nach der Verwendung des Dekorators @user_login entsprechend dem Format des Dekorators hinzuzufügen. Wenn der Python-Interpreter dann ausgeführt wird, wird er von oben nach unten erklärt Unten führt der Code zuerst die Funktion user_login aus und übergibt ucOrder als Parameter der Funktion user_login, was äquivalent zu user_login(ucOrder) ist. Diese Funktion überprüft, ob der Benutzer angemeldet ist, und bestimmt so, ob ucOrder ausgeführt werden soll Funktion
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()
Ausführungsergebnisse:
/usr/bin/python2.7 /home/python/Desktop/tornadoProject/one.py ----a---- ----1---- ----2---- ----b---- ----3----
Aus den Ausführungsergebnissen können Sie ersehen, dass dies der Fall ist, wenn mehrere Dekoratoren verwendet werden Die Ausführungsreihenfolge ist immer noch etwas seltsam, warum ist das so?
Zu diesem Problem gibt es bessere Artikel zur Erklärung, Mythen über die Ausführungsreihenfolge von Python-Dekoratoren
Mehr Python-Aufrufreihenfolge für mehrere Dekoratoren Bitte achten Sie auf verwandte Artikel zur chinesischen PHP-Website!