数年前に初めて Python を学んだとき、デコレータを見たとき、Jiuyin マニュアルの奇妙な言葉が理解できないと感じたのを覚えています。確かに、多くの初心者にとってデコレータは理解するのが非常に難しい概念だと思います。同じ状況に陥っているので、この記事では主に Python のデコレータに関する情報を紹介します。必要な方は参考にしてください。
この記事を読むと、デコレーターは難しくなくなります
1. デコレーターとは何ですか
このような装飾家は、文章がとても面白く、比喩がとても鮮やかだと思います
誰もが持っている下着は主に恥を隠すために使用されますが、冬には風や寒さから身を守ることができません。 ?
私たちが考えた一つの方法は、下着を厚く長くすることです。これにより、恥を隠す機能だけでなく、この下着には問題がありました。長ズボンを履くと、恥を隠す機能はあるものの、本質的には下着ではなくなってしまいます。そこで賢い人たちはズボン
を発明し、下着に影響を与えずにズボンを直接下着の外側に着用しました。 このようにして、ズボンを履くと寒さを感じることはなくなります
。ここで話しているズボンと同じように、下着の機能に影響を与えることなく体に暖かさを与えます
2. デコレータの前編4ステップ
なぜデコレータを入れる必要があるのですか?これについては、入門章の最後で説明します。これは非常に難しく、理解するには多くの前提条件があるためです。誰もが Python の関数を理解していると思いますが、関数もオブジェクトであり、パラメーターのように渡すことができることをご存知ですか? 次の例を見てみましょう:
1) 関数もオブジェクトです
def message(word='hello'): return word.upper()+'!' print message() >> HELLO! my_message=message print my_message >> <function message at 0x000000000288E198> print my_message() >> HELLO!
つまり、メッセージは代入できます。別の変数への値
2) 関数は別の関数内でネストして定義できます
def show(): print 'Run in show()' def message(word='hello'): return word print message() show() >> Run in show() hello
message は show 関数内にネストできます。show が呼び出されるとき、message 関数も実行されます
3) 関数。パラメータとして返す
信じられない場合は、以下の例を見てください
4) 関数は次のとおりです。パラメータとして渡されます まず getName 関数を作成し、この関数をパラメータとして foo 関数に渡します
>> <function lower at 0x00000000027DAD68> hello...
3 デコレータの素顔
1)前の手順を完了すると、関数はパラメーターとして渡すことができ、パラメーターとして返すことができ、ネストすることもできます デコレーターは実際には関数を再パッケージ化することができます。関数を変更せずに、関数の一部のコードを実行できます
>> I will call the getName function later leo
デコレータはとても簡単です。これは Python のコードであり、簡潔です。 効率的
は実際には以下と同等です:
a_stand_alone_function() >> I am a stand alone function,don't you dare modify me a_stand_alone_function_decorated=my_new_decorator(a_stand_alone_function) a_stand_alone_function_decorated() >> Before the function runs I am a stand alone function,don't you dare modify me After the function runs
デコレータには、次のような利点があります。コードの保守性と美しさ。また、構造化ツールとして、デコレーターはコードのカプセル化を自然に促進し、冗長性を減らし、将来のメンテナンスと拡張を容易にします。 Django と Flask を学習したことがある場合は、Web フレームワークでコードをカプセル化するために多数のデコレーターが使用されていることをご存知でしょう。以下の簡単な例を見てみましょう:
文字列を出力するテーマ関数があります。 have 1 つの関数は文字列を太字にし、もう 1 つの関数は文字列を斜体にします。デコレータを使用すると、それらを非常に柔軟に組み合わせて関数の機能を拡張できます:
another_stand_alone_function=my_new_decorator(another_stand_alone_function)
word()
注意すべき点は、デコレータの順序が変更されると、結果が異なることです。>> <b><i>hello</i></b>
さて、デコレータは準備ができました。これで開始できます。わからないことがあれば、メッセージを残して話し合ってください。実際、デコレータやクラス デコレータなどを介してパラメータを渡すなど、デコレータには高度な使用法が数多くあります。それらについては後ほど説明します。
概要以上がPythonのデコレータについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。