【Python】デコレータを使って関数を装飾しよう

田中太郎
田中太郎

デコレータを使って関数の処理時間を計測するよ!

デコレータとは

デコレータは、既存の関数に機能を追加する関数です。

関数自体には手を加えず、まさしくデコレート(装飾)します

解説

まず、mainという関数があるとしましょう

def main():
    print("Hello World")

main()

単純ですね。実行結果は

Hello World

こんな感じになります。ここまでは良いでしょう

この関数をデコレートしてみましょう

def decorate_func(func):  # main()をデコレートする関数です
    def _tmp(*args, **kwargs):
        print("***Start***")
        func(*args, **kwargs)
        print("***End***")
    return _tmp


@decorate_func  # @<関数名> がデコレータの書き方です
def main():
    print("Hello World")


main()

実行結果です

***Start***
Hello World
***End***

デコレート完成です

def _tmp(*args, **kwargs):

*<変数>で任意の数の引数を持つ関数を作れます。

**<変数>で任意の数の辞書型を引数に持つ関数を作れます。

例です

def main(*args, **kwargs):
    print(*args)
    print(**kwargs)

arg1 = "hoge"
arg2 = [1, 2, 3]
kwarg1 = {"key1": "val1"}
kwarg2 = {"key2": "val2"}

main(arg1, kwarg1)
main(arg1, arg2, kwarg1, kwarg2)

実行結果です

hoge {'key1': 'val1'}

hoge [1, 2, 3] {'key1': 'val1'} {'key2': 'val2'}

まとめ

今回はデコレータを紹介しました。

デコレータは便利なのでぜひほかにも使ってみてください。

コメント

タイトルとURLをコピーしました