初心者にもわかる!Pythonのデコレータを徹底解説

未分類

プログラミングを学び始めたあなたにとって、Pythonは非常に魅力的な言語です。その中でも「デコレータ」という機能は、効率的なコードを書くための強力なツールです。この記事では、デコレータの基本から応用までを丁寧に解説していきますので、ぜひ最後までお付き合いください。

デコレータとは?

デコレータは、関数やメソッドの振る舞いを変更するための関数です。具体的には、ある関数を引数に取り、別の関数を返すという仕組みになっています。これにより、元の関数に手を加えずに、その機能を拡張することができます。

デコレータの基本的な使い方

まず、デコレータの基本的な構文を見ていきましょう。以下の例では、シンプルなデコレータを作成しています。

def my_decorator(func):
    def wrapper():
        print("前処理を行います。")
        func()
        print("後処理を行います。")
    return wrapper

@my_decorator
def say_hello():
    print("こんにちは!")

say_hello()

このコードを実行すると、次の出力が得られます。

前処理を行います。
こんにちは!
後処理を行います。

ここでのポイントは、@my_decoratorという記法です。これにより、say_hello関数はmy_decoratorによってラップされ、前後に処理が追加されるのです。

デコレータの引数を受け取る方法

デコレータは引数を受け取ることも可能です。以下の例を見てみましょう。

def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)
        return wrapper
    return decorator_repeat

@repeat(3)
def greet(name):
    print(f"こんにちは、{name}さん!")

greet("太郎")

この例では、greet関数が呼ばれるたびに、指定した回数だけ挨拶が表示されます。出力は以下のようになります。

こんにちは、太郎さん!
こんにちは、太郎さん!
こんにちは、太郎さん!

デコレータの実用例

デコレータは、ログ記録や認証、キャッシュ処理など、さまざまな場面で活用できます。ここでは、実際のアプリケーションでの使用例を見てみましょう。

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__}の実行時間: {end_time - start_time:.4f}秒")
        return result
    return wrapper

@timer
def compute_sum(n):
    return sum(range(n))

compute_sum(1000000)

このデコレータは、関数が実行されるのにかかった時間を計測して表示します。これにより、パフォーマンスのボトルネックを特定する手助けとなります。

まとめ

デコレータはPythonの強力な機能であり、コードの可読性や再利用性を向上させます。この記事では、デコレータの基本的な使い方から実用例までを解説しました。これを機に、デコレータを活用して、より洗練されたPythonプログラムを作成してみてください。プログラミングの楽しさは、こうした小さな工夫から生まれます。

これからもPythonを学びながら、様々なテクニックを身につけていきましょう!

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