田中太郎
デコレータを使って関数の処理時間を計測するよ!
デコレータとは
デコレータは、既存の関数に機能を追加する関数です。
関数自体には手を加えず、まさしくデコレート(装飾)します
解説
まず、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'}
まとめ
今回はデコレータを紹介しました。
デコレータは便利なのでぜひほかにも使ってみてください。
コメント