#Python ビデオ チュートリアルデコレータの説明
#無料推奨:デコレーターの概念
デコレーターは、率直に言えば、関数を装飾するために使用される関数## です。 デコレータは、オープンクローズ原則
と依存関係逆転原則
に従います。これらの2つの原則と概念は、Baiduで見つけることができます。デコレータは次のようになりますか?
def wrapper(f): def inner(*args,**kwargs): ret = f(*args,**kwargs) return ret return inner上記のコードはデコレータの固定形式です
デコレータの呼び出し
@wrapper # 简称语法糖 def test(): print(1) test()
@wrapper はデコレータを呼び出しています。 wrapper(test())
@wrapper が必要なのでしょうか?呼び出し元の関数は
wrapper() ではありませんか?
実は、言われてみると分かりませんが、この方が書きやすいということだけはわかっています。装飾される関数の直前@wrapper
小さな例でデコレータを簡単に理解する
<pre class="brush:php;toolbar:false">def wrapper(f):
print(2)
def inner(*args,**kwargs):
print(3)
ret = f(*args,**kwargs)
print(4)
return ret
return inner
@wrapper
def test():
print(1)
test()</pre>
@wrapper = = wrapper(test())
@wrapper*args## を直接使用する方が簡単です。 # は、位置パラメータの場合、
**kwargs がキーワードで渡されたパラメータと一致するため、すべてのパラメータを受け取ることができます。
wrapper(test)値を受け取り、
f に渡します。内円関数では、
ret = f(*args,**kwargs)
この関数は装飾された関数を実行するコードです。次に、実行された値を返し、最後にこの関数を返します。このコードの実行結果は次のとおりです。 <pre class="brush:php;toolbar:false">2
3
1
4</pre>
#次の図に示すように
#これからわかります。 function
innerの print(3)
は装飾関数を実行する前の操作、print(4) は装飾関数を実行した後の操作ですデコレーション機能を実行します。 わかりにくいかもしれません。ですから、試してみるのが一番です。 基本的な演習
'''1. 默写装饰器固定格式 2. 写一个加减功能的装饰器 '''
以上がPython の基本的なデコレータと演習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。