概念や仕組みを理解することを楽しむためにプログラミングの勉強をしています。
python3系の本を一通り読んだのですが、どうも腑に落ちない(合点がいかない)点として高階関数への理解があります。質問の意味が理解でき、ご存知の方がいらっしゃれば教えて頂けないでしょうか。
◆不明点
①高階関数の挙動の理解は正しいか
②高階関数内の関数への引数がどのタイミングで渡っているか
③ネストが動作しない
です。例えば以下のコードにおいて…
python3
1def decofunc(targetfunction): 2 def new_function(*args,**kwargs): 3 print('Runnning funciton is', targetfunction.__name__) 4 print('Positional arguments are',args) 5 print('Keyword arguments are',kwargs) 6 result = targetfunction(*args,**kwargs) 7 print('Result is',result) 8 return result 9 return new_function 10 11def adding(a,b): 12 return a+b 13 14aaa=decofunc(adding) 15print(aaa(3,4))
実行結果 Runnning funciton is adding Positional arguments are (3, 4) Keyword arguments are {} Result is 7 7
①挙動の理解は正しいか
0. aaaオブジェクトに 関数decofuncを代入。 関数decofuncの引数は、関数adding
0. 関数printが出力する内容として、関数decofuncであるオブジェクトaaaを実行する。
0. 関数decofuncの'return new_function'の行が実行される→関数new_funtionが実行される
→(②この段階で*argsに(3,4)が代入されるようだがどういう理屈か?)
0. 各printが表示される
0. 関数new_funcitonが最後にresultを返す=7 を返す
0. 7が出力される
③
最終行に
python3
1decofunc(adding(3,4))
という行を追加しても上記実行結果と同じものが出力されず、空欄になるのも ? です。
質問内容すら的外れなのかもしれませんが、、、宜しくお願いします。。
補足情報
vscode/anaconda4.4.0を使っています。
もともとは「デコレータとは?」ということでいろいろ文献をあたっているものの、まったく理解が進んでいませんでしたが、デコレータ=高階関数の記法の一つということが分かったので高階関数を理解すればデコレータも理解できると思い、理解を掘り下げているとこです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/12 13:23
2018/09/12 13:43 編集
2018/09/12 15:19 編集