関数が呼び出された時に'start'、終了した時に'end'と表示するtestというデコレータを定義しよう(O'REILLYの入門 python3 P136復習課題4-10より)
関数new_funcの処理結果であるresultをstartとendの間に表示しようと考え、print(end)の前にresultが戻り値として表示されるよう組んだのですが、以下のようになりendが表示されなくなってしまいます。
python3
1>>> def test(func): 2... def new_func(*args, **kwargs): 3... print('start') 4... result = func(*args, **kwargs) 5... return result 6... print('end') 7... return new_func 8... 9>>> @test 10... def greeting(): 11... print('Hello') 12... 13>>> greeting() 14start 15Hello
試したこと
解答のコードは以下のようになっており、returnをprint('end')の後ろに持ってくる、というものでした。自分の感覚では、この位置にreturnを書くと、endの後にresultが表示されてしまう(start→end→resultの順)のでは?と考えたのでどうも納得いきません...returnの持つ意味と記述する位置について教えて頂けますと幸いです。
python3
1>>> def test(func): 2... def new_func(*args, **kwargs): 3... print('start') 4... result = func(*args, **kwargs) 5... print('end') 6... return result 7... return new_func 8... 9>>> @test 10... def greeting(): 11... print('Hello') 12... 13>>> greeting() 14start 15Hello 16end 17``` 18 19 20### 補足情報(FW/ツールのバージョンなど) 21 22ここにより詳細な情報を記載してください。
markdownでのソースコードの書き方は、以下をご覧になるとわかりやすいです。
ソースコードを書きましょう
https://teratail.com/help/question-tips#questionTips3-5-1
3-7. markdownを利用しましょう
https://teratail.com/help/question-tips#questionTips3-7
def new_func(*args, kwargs):
は、
def new_func(*args, **kwargs):
ではないですか?
ご指摘ありがとうございます。
おっしゃる通り、kwargs→**kwargsの間違いでした。
ターミナルからそのままコピペして貼り付けたのですが、サイト上では仕様が変わってしまうのですね...気をつけます!
回答2件
あなたの回答
tips
プレビュー