Pythonのデコレータって何?
ナカイ君: Pythonのデコレータについてわかりやすく教えてほしいんだけど。
世界のアオキ: OK、デコレータとは、関数やメソッドの挙動を変更するための強力なツールだよ。関数に機能を「装飾」することで、コードの重複を避けながら、柔軟に関数の機能を拡張できるんだ。
ナカイ君: もっと具体的に教えてくれない?
世界のアオキ: そうだね。例えば、関数の実行時間を測定したい場合や、関数の入出力をログに記録したい場合にデコレータを使うと便利だよ。これにより、本来の関数コードを変更せずに追加機能を実装できるんだ。
わかりやすいコード例
ナカイ君: わかりやすいコードがあれば教えてほしいな。
世界のアオキ: もちろんだよ。関数の実行時間を計測するデコレータの例はこんな感じだよ。
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f'{func.__name__} took {end_time - start_time} seconds.')
return result
return wrapper
@timer
def my_function(x):
return x * 2
print(my_function(10))
このコードでは、@timer
デコレータをmy_function
関数に適用して、関数の実行時間を計測しているよ。
具体的にどうやって使うの?
ナカイ君: 具体的にはどうやって使うの?
世界のアオキ: デコレータを使うには、@デコレータ名
を関数定義の前に記述するんだ。上の例では@timer
がそれにあたるよ。これだけで、指定した関数にデコレータが適用されるんだ。
ナカイ君: 他のパターンがあれば教えてほしいな。
世界のアオキ: 了解だよ。複数のデコレータを同時に適用することもできるんだ。例えば、関数の実行前後にログを出力するデコレータと、実行時間を計測するデコレータを組み合わせることができるよ。
@logger
@timer
def another_function(x):
return x ** 2
この場合、another_function
関数に先に@timer
が適用され、次に@logger
が適用されるんだ。
ナカイ君: そうやって使えばいいんだね。
世界のアオキ: そういうわけで、デコレータを使えば、関数の再利用性を高めつつ、コードの可読性も保ちながら、柔軟に関数の機能を拡張できるんだ。
ただし、デコレータを使う場合は、コードの流れを追いやすくするためにも、デコレータの挙動をしっかり理解しておくことが大切だよ。
ナカイ君: わかった、ありがとう!
まとめ
Pythonのデコレータは、関数やメソッドに追加機能を「装飾」として付け加える強力な機能です。関数の挙動を変更したり、機能を追加することができ、コードの重複を避けることができます。
ナカイ君のように基本からしっかり学んで、デコレータを活用してみましょう!
この記事へのコメントはありません。