Menu
Coddy logo textTech

Python Syntax

Coddyの「Pythonデコレーター」コースのレッスン 6/12。

前回のレッスンでは、関数デコレータを作成する方法を見ましたが、Pythonは@記号を使用してこの機能を実現する、よりエレガントな方法を提供しています。

例えば、

def my_decorator(func):
    def wrapper():
        print("Before function is called.")
        func()
        print("After function is called.")
    return wrapper

@my_decorator
def my_function():
	print("Inside my_function.")

my_function()を実行すると、次のような出力が表示されます。

Before function is called.
Inside my_function.
After function is called.

これは、デコレータ関数my_decoratorが、my_functionが呼び出される前後にいくつかの追加コードを加えることで、その動作を変更できたことを示しています。

challenge icon

チャレンジ

簡単

関数 add のコードが与えられています。

あなたのタスクは、前回のレッスンと同様に debug という名前の関数デコレータを作成することですが、いくつか追加事項があります:

  • @ 記号を使用して、関数デコレータ debugadd に適用してください。
  • debug 関数は関数の引数をサポートする必要があります。

デコレータで引数を持つ関数をサポートするには、次のように記述します:

def my_decorator(func):
    def wrapper(a, b):
        print("Before function is called.")
        func(a, b)
        print("After function is called.")
    return wrapper

例:

関数呼び出し add(2, 3) に対して、以下のように出力される必要があります:

Calling add with arguments (2, 3)
add returned: 5

自分で試してみよう

# ここにコードを記述します


def add(a, b):
    return a + b

Pythonデコレーターのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ