ホームページ  >  記事  >  バックエンド開発  >  Python の基本的なデコレータと演習

Python の基本的なデコレータと演習

coldplay.xixi
coldplay.xixi転載
2020-12-22 17:45:002623ブラウズ

#Python ビデオ チュートリアルデコレータの説明

Python の基本的なデコレータと演習

#無料推奨:

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

Python の基本的なデコレータと演習print(3)

は装飾関数を実行する前の操作、

print(4) は装飾関数を実行した後の操作ですデコレーション機能を実行します。 わかりにくいかもしれません。ですから、試してみるのが一番です。
基本的な演習

'''1. 默写装饰器固定格式
  2. 写一个加减功能的装饰器
'''

以上がPython の基本的なデコレータと演習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjianshu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。