デコレータはプログラム開発でよく使われる関数であり、Python言語開発の基礎知識でもありますが、プログラム内でデコレータを合理的に使用できれば、開発効率が向上するだけでなく、コードを書きやすくなります。より読みやすくなりました^_^
簡単な例は次のシナリオです
関数実行時間統計の紹介
関数の実行 事前準備処理
関数実行後の関数のクリーニング
権限検証とその他のシナリオ
キャッシュ
Decorator case
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): ''' 获取数据 处理数据 传递到页面上去以上がdecoratorの使い方ですのエーターシンプルな電子商取引アプリケーションの場合、ucOrder 関数はユーザーのログイン後にのみ実行できます。デコレータを使用しない場合、一般的なアプローチは、ユーザーがログインしているかどうかを判断するための一連の検証コードを ucOrder に記述してから、その後の実行ロジックを決定することですが、これはより面倒です。 デコレーターの使用は比較的簡単です。デコレーターの形式に従って @user_login を ucOrder 関数に追加するだけで、Python インタープリターの実行時にコードが上から下に解釈され、最初に実行されます。 . user_login関数を使用し、user_login(ucOrder)に相当するucOrderをuser_login関数のパラメータとして渡し、ユーザーがログインしているかどうかを確認し、ucOrder関数を実行するかどうかを決定する機能を持ちます
。複数のデコレータの呼び出しシーケンス
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()
実行結果:
/usr/bin/python2.7 /home/python/Desktop/tornadoProject/one.py ----a---- ----1---- ----2---- ----b---- ----3----
この問題に関しては、Python デコレータの実行順序に関する通説を説明できるより良い記事があります
複数の Python デコレータの呼び出し順序に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。