Pythonの高階関数について教えて下さい。
次の高階関数サンプルコードの処理の順番がイメージできませんでした。
Python
1def log_func(func): 2 def inner(*args, **keywds): 3 print('-----------------') 4 print(f'Name: {func.__name__}') 5 print(f'Args: {args}') 6 print(f'Keywds: {keywds}') 7 print('-----------------') 8 return func(*args, **keywds) 9 return inner 10 11def hoge(x, y, m='bar', n='piyo'): 12 print(f'hoge: {x}-{y}/{m}-{n}') 13 14log_hoge = log_func(hoge) 15log_hoge(15, 37, m='ほげ', n='ぴよ')
そこで、次のようにprintを各所に入れ込み、処理をしてみました。
Python
1def log_func(func): 2 print("A") 3 def inner(*args, **keywds): 4 print("B") 5 print('-----------------') 6 print(f'Name: {func.__name__}') 7 print(f'Args: {args}') 8 print(f'Keywds: {keywds}') 9 print('-----------------') 10 return func(*args, **keywds) 11 print("C") 12 return inner 13 14def hoge(x, y, m='bar', n='piyo'): 15 print("D") 16 print(f'hoge: {x}-{y}/{m}-{n}') 17 18print("E") 19log_hoge = log_func(hoge) 20print("F") 21log_hoge(15, 37, m='ほげ', n='ぴよ')
この出力結果は
E A C F B ----------------- Name: hoge Args: (15, 37) Keywds: {'m': 'ほげ', 'n': 'ぴよ'} ----------------- D hoge: 15-37/ほげ-ぴよ
となりました。
ここで、疑問があります。
自分としては、
E→A→C→B→D→F
になるのではないかと予想していたのですが、そうではないようでした。
要は、Cの直後でreturnでinner関数を呼び出しているので、Cの次はinner関数の内部のBに行くのではないのかと考えていました。
Cの後にinner関数ではなく、Fの地点に飛ぶ理由を教えていただけないでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。