Pythonカスタム装飾器の原理と使い方の例の分析
1847 ワード
この例では、Pythonカスタムアクセサリーの原理と使い方について説明します.皆さんの参考にしてください.具体的には以下の通りです.
装飾器とは何ですか.装飾器の本質は関数であり、元の関数を変更することなく、いくつかの機能を追加することができます.一般的な@classmethod、@staticmethodなどはすべて装飾器で、次に装飾器をカスタマイズする方法を記録します.
さっき言ったように、装飾器の本質は関数であり、装飾器をカスタマイズするには、まず関数をカスタマイズします.
この時点で基本的な装飾器が定義されていますが、どうやって呼び出すのでしょうか.
出力された結果は次のとおりです.
アクセサリーを定義するtext 1
解析:このときの
パラメータ付き装飾器
簡単な装飾器の定義を紹介しましたが、
出力結果:
パラメータ付きアクセサリーpython text 1を定義する
分析:パラメータ付きの装飾器は普通の装飾器と1層多くプラスして、実は“python”パラメータがdecorate関数に入って、そしてwrapper関数のメモリアドレスを返して、更にtext 1関数のメモリアドレスをwrapper関数に入って、そしてsub_を返しましたwrapper関数のメモリアドレス.コードの末尾でtext 1を呼び出すのは、本質的にsub_を呼び出すことです.wrapper関数.
Pythonに関する詳細について興味のある読者は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python暗号解読アルゴリズムとテクニックの総括」、「Python符号化操作テクニックの総括」、「Python関数使用テクニックの総括」、「Python文字列操作テクニックの総括」、「Python入門と進級経典チュートリアル」を参照してください.
ここでは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プログラムの設計に役立つことを願っています.