デコレータは Python の非常に便利なツールです。デコレータは、別の関数をパラメータとして受け取り、明示的に変更せずにその機能を拡張する関数です。これにより、ソース コードに触れることなく、関数またはクラスの動作を変更できます。
言い換えると、デコレーターは関数を永続的に変更するのではなく、その動作を拡張するために関数をラップします。
この記事から始めて、デコレータとは何か、そしてデコレータが Python でどのように機能するかを学びましょう。
デコレータがどのように機能するかを理解するには、Python の関数に関するいくつかの重要な概念を確認する必要があります。 Python では関数が第一級市民であることを常に意識してください。そのため、次の概念に留意してください:
これらの点に関する関数の例を見てみましょう。
1.1.1 例-1: 通常の変数への値の代入
# 把函数赋值给常规变量: # 定义简单函数 def sayHi(name:str): return "Hi " + name + "." #应用:函数赋值给变量 hi = sayHi print(hi("Solo Cui")) #输出结果 Hi Solo Cui.
コードでは、関数をsayHiとして定義します。次に、この関数を hi という名前のローカル変数に割り当てます。この変数 hi も関数です。この場合、割り当てられた変数は関数のエイリアスとみなすことができます。次のステップでは、変数 hi を関数として呼び出します: hi("Solo Cui")。
1.1.2 例-2: パラメーターとして渡される関数
コード リストは次のとおりです:
# 函数作为参数传递 def printHello(name): print("Hello,", name) # 把函数作为参数的函数 def hiWithFunction(func, xname): func(xname) #调用以函数为参数的函数 hiWithFunction(printHello,'上官婉儿')
コードは理解しやすいです。 2 つの関数が定義されており、関数は関数パラメータを受け取ることができ、別の関数は関数パラメータを受け取ることができる関数にパラメータとして渡されます。
1.1.3 例-3: 関数を返す関数
コード リストは次のとおりです:
#示例3:返回函数的函数 def returnXFunction(): return sayHi #示例1中定义的函数,可自行定义其它函数 # 调用函数 xHi = returnXFunction() print(xHi("BirdMan"))
ここでは、別の関数、つまり returnXFunction() を返す単純な関数を定義します。関数を呼び出し、戻り値を変数に代入します。 xHi を使用すると、関数を返す関数を実行するために変数名 xHi が使用されます。
1.1.4 例-4: 関数組み込み関数本体
つまり、関数本体内に関数を定義します。コードを見てください:
# 示例4:函数体内不含税 def outerXFunction(msg): '''外部函数''' #代码... #定义内嵌函数 def innerXFunc(): '''内部函数''' print(msg,'来自内嵌函数.') #函数体内调用内嵌函数 innerXFunc() #调用外部函数 outerXFunction("火麒麟")
関数 externalXFunction 内で innerXFunc 関数を定義し、外部関数本体内で埋め込み関数を呼び出したので、外部関数が呼び出されたときに埋め込み関数が実行されます。
コードに示すように、外部関数を呼び出すときに、文字列「Fire Qilin」をパラメーター msg に渡します。 「埋め込み関数から発火するQilin」の出力は自己埋め込み関数によって完成します。 innerXFunc で使用される msg 変数は、独自の関数本体では定義されていないことに注意してください。言い換えると、親スコープの変数を使用します。これが Python のクロージャーの概念です。
Python クロージャについて簡単に説明すると、クロージャは親オブジェクトのスコープ内の値を記憶する関数オブジェクトであり、関数と一連の「プライベート」変数の間の関連付けを作成するために使用できます。 。 関係。これらのプライベート変数は、特定の関数への複数の呼び出しにわたって永続性を維持します。
以上がPython プログラミング: デコレーター関数の再理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。