Pythonカスタム装飾器の原理と使い方の例の分析

1847 ワード

この例では、Pythonカスタムアクセサリーの原理と使い方について説明します.皆さんの参考にしてください.具体的には以下の通りです.
装飾器とは何ですか.装飾器の本質は関数であり、元の関数を変更することなく、いくつかの機能を追加することができます.一般的な@classmethod、@staticmethodなどはすべて装飾器で、次に装飾器をカスタマイズする方法を記録します.
さっき言ったように、装飾器の本質は関数であり、装飾器をカスタマイズするには、まず関数をカスタマイズします.

def decorate(func):
  def wrapper(*args,**kwargs):
    print("       ")
    func(*args,**kwargs)
  return wrapper


この時点で基本的な装飾器が定義されていますが、どうやって呼び出すのでしょうか.

@decorate
def text1():
  print("text1")
text1()


出力された結果は次のとおりです.
アクセサリーを定義するtext 1
解析:このときの@decorateはtext 1関数のメモリアドレスをdecorate関数に入力し、wrapper関数のメモリアドレスを返すことに相当する.したがって、text1()がコードの最後に呼び出されるのは、本質的にwrapper関数を実行することである.wrapper関数を実行しているので、「デコレーションを定義する」と印刷し、func関数がtext 1のメモリアドレスであるためfuncを呼び出すと「text 1」が印刷されます.
パラメータ付き装飾器
簡単な装飾器の定義を紹介しましたが、@xxxxxxx(abc="python")という装飾器がどのようにパッケージされているのか、原理はどうなっているのか、よく見られます.

def decorate(name):
  def wrapper(func):
    def sub_wrapper(*args,**kwargs):
      print("           ",name)
      func(*args,**kwargs)
    return sub_wrapper  
  return wrapper
@decorate(name="python")
def text1():
  print("text1")
text1()


出力結果:
パラメータ付きアクセサリーpython text 1を定義する
分析:パラメータ付きの装飾器は普通の装飾器と1層多くプラスして、実は“python”パラメータがdecorate関数に入って、そしてwrapper関数のメモリアドレスを返して、更にtext 1関数のメモリアドレスをwrapper関数に入って、そしてsub_を返しましたwrapper関数のメモリアドレス.コードの末尾でtext 1を呼び出すのは、本質的にsub_を呼び出すことです.wrapper関数.
Pythonに関する詳細について興味のある読者は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python暗号解読アルゴリズムとテクニックの総括」、「Python符号化操作テクニックの総括」、「Python関数使用テクニックの総括」、「Python文字列操作テクニックの総括」、「Python入門と進級経典チュートリアル」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.