Pythonで関数デコレータをチェーン(連結)して使う方法
Pythonにおけるデコレータとは、いわば「ラッパー」のようなものです。関数そのもののコードを変更することなく、装飾対象の関数の実行前後に任意の処理を追加できます。
さらに、デコレータは1つの関数に対して複数を重ねて適用する(チェーンする)ことも可能です。この記事では、その基本的な使い方を具体例とともに解説します。
デコレータをチェーンするサンプルコード
以下の例では、makebold と makeitalic という2つのデコレータを定義し、hello 関数に両方を適用しています。
def makebold(fn):
def wrapped():
return "<b>" + fn() + "</b>"
return wrapped
def makeitalic(fn):
def wrapped():
return "<i>" + fn() + "</i>"
return wrapped
@makebold
@makeitalic
def hello():
return "hello world"
print(hello())実行結果
<b><i>hello world</i></b>
解説:デコレータの適用順序
このHTML出力をブラウザなどで表示すると、「hello world」という文字列が太字かつ斜体で表示されます。
ポイントは、デコレータは関数に近い側(下側)から順に適用されるという点です。上記の例では、まず @makeitalic が適用されて文字列が <i> タグで囲まれ、次にその結果が @makebold によって <b> タグで囲まれます。
つまり、処理の流れは次のようになります。
hello()の戻り値"hello world"がmakeitalicで<i>hello world</i>になる- その結果が
makeboldで<b><i>hello world</i></b>になる
このように、デコレータをチェーンすることで、関数本体を一切変更せずに、複数の処理を柔軟に組み合わせることができます。ロギング、認証チェック、キャッシュ処理など、実務でも幅広く活用されるテクニックなので、ぜひマスターしておきましょう。
-
【Python入門】defで定義した関数をMatplotlibでプロットする方法
Pythonでは、defキーワードで定義した自作関数を、Matplotlibを使って簡単にグラフ化できます。本記事では、ユーザー定義関数 f(x) を作成し、その結果をプロットするまでの基本手順をサンプルコード付きで解説します。 プロットまでの基本手順 defで定義した関数をプロットするには、以下の手順に従います。 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整する defを使ってユーザー定義関数 f(x) を作成する NumPyを使って x のデータ点を生成する plot()メソッドで x と f(x) をプロットする show()メソッドで図を画面に表示する サ
-
Pythonで対数ヒストグラムを作成する方法【matplotlib活用】
Pythonのmatplotlibを使って対数(ログ)スケールのヒストグラムを作成するには、hist()メソッドの引数にlog=Trueを指定します。これにより、縦軸が対数スケールで表示され、値の範囲が大きく異なるデータも見やすく可視化できます。作成手順数値のリスト(配列)を用意します。density=Trueを指定して、正規化されたヒストグラムをプロットします。図を表示するには、show()メソッドを呼び出します。サンプルコードimport numpy as np import matplotlib.pyplot as plt plt.rcParams[figure.figsize] = [