Pythonで、しばしば傍受、機能制御の目的を達成するために、機能パッケージにある関数を定義する際に、記号(デコレータ)@糖衣構文と呼びます。
D DEF(F): プリント( 'D ...') K = F#は、本明細書にF本来の機能保持に渡さ :DEF F(X)を リターンK(X)* 2 Fのように書くことができる。ここで、f戻り# (x)は、fは関数ハンドルである、)(バンド場合、コールリターンはここでしか扱います。 @d DEF E(X): リターンX 2 **
印刷(E(3)。)
上記のコード例では、D @、E = D(E)、D(E)Fの戻り値、fは関数ハンドルであると同等である、ハンドルが関数E dを、戻り値は、正確でもあるが糖衣構文後、この時間は、もはや元のE-Eではないが、F、コールE(X)は、実際に、コールF(X)、すなわちD(F)(X)、K Dによって返さセーブ= F、本来の機能は、後で使用するためにkに渡されました。したがって、デコレータの動作は、元の関数の戻り値2倍に拡張したものです。
D ...
18
プリントの値として、元の関数の拡張は、2倍の値を返し正当化します。
糖衣構文、パラメータ、以下のコードであってもよいです。
DEF (X、Y): DEF B(F): K = F DEF F(Z): リターン X * Y * K(z)の リターンF リターンBの @a( 2,3 ) DEF E(X): リターン X ** 2 プリント(E(5))
、(2,3)、E =(2,3)から(e)と等価である@、(x、y)の関数は、ハンドルを返す必要があり、同じ説明、および機能は、パラメータ関数ハンドルeとして取り扱うことが必要ですこれは、パッケージEを呼び出すときに実際の装飾は、K = Fにより、保存された元の関数ハンドルは、Bは、(B)は、着信であること、機能ハンドラコードBであります、fが実際に呼び出され、FリターンX * Y * K(z)は、関数は、元の値は、x * yの倍拡大程度で戻り、バック。
150