デコレータの処理は、どの関数が何を表しているのか分かりにくいですが、
順を追って関数がどのように受け渡されているのかを考えていけばわかります。
(以下の内容では、問題の核ではない print()
などは省いていますが、 print()
は wrapper
を呼び出したときに実行されると思ってください。)
print_info(add_num)
py
1# イメージとして、 add_num は以下のように処理に組み込まれますね
2
3def print_info(add_num):
4 def wrapper(*args, **kwargs):
5 result = add_num(*args, **args)
6 return result
7 return wrapper
8
9# つまり、 print_info の戻り値は
10
11def wrapper(*args, **kwargs):
12 return add_num(*args, **args)
13
14# このとき、関数 wrapper は、渡された引数を更に add_num に渡して実行しているだけです。
f(10, 20)
前項より、 f
は wrapper(*args, **kwargs)
と同じです。
なお、 wrapper
は add_num
を呼び出すだけの関数でした。
py
1r = f(10, 20)
2
3# は、
4
5r = wrapper(10, 20)
6
7# wrapper は add_num に引数を渡して実行しているだけなので実質・・・
8
9r = add_num(10, 20)
add_num(10, 20)
py
1def add_num(a, b):
2 return a + b
3
4# a = 10, b = 20 なので
5
6return 10 + 20
細かく注釈を入れましたが、不明な点があったらコメントをください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。