亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于裝飾函數

關于裝飾函數

armstrong007 2016-08-12 17:00:11
def?f1(x): ????return?x*x? def?f2(x): ????return?x*x*x? def?f3(x): ????return?x*x*x*x? print?f1(9) print?f3(9) def?new_fn(f): ????print?'call?'+f.__name__+'()' ????return?f f1=new_fn(f1) print?f1(9) 上面是我寫的,在定義def?new_fn(f)的時候?我沒有定義教程中的?def?fn(x),但是我的結果也是正確的。這是否代表教程中def?fn(x),是多此一舉,還是因為我忽略了什么知識
查看完整描述

1 回答

?
Nelson_Zhao

TA貢獻21條經驗 獲得超4個贊

說下個人理解,任何函數的出現我們都是希望在調用它時輸出結果,你的代碼中,如果說按照裝飾器的寫法來寫(把f1=new_fn(f1)改寫成@new_fn),我們來看看結果。

http://img1.sycdn.imooc.com//57afeb8b000147b309480940.jpg

可以發現我們還沒有進行任何調用操作,就出現了裝飾器函數中的輸出結果。這在語法上沒有任何問題,但不符合我們寫函數的目的,我們都還沒有調用就輸出,所以說在裝飾器函數中我們寫入了fn(x)這樣的嵌套函數以后,返回的是函數調用。

改寫后:

57afeca10001184e05000516.jpg

可以看出運行后,不會自動輸出裝飾結果,只會返回函數的引用,這是符合我們的要求的。

57afeca30001479e05000494.jpg

當調用f1函數時候,才會輸出當前的結果。


查看完整回答
反對 回復 2016-08-14
  • 1 回答
  • 0 關注
  • 1292 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號