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

為了賬號安全,請及時綁定郵箱和手機立即綁定

代碼執行邏輯為是什么樣子的?

我加了幾句輸出語句想看看decorator中的代碼如何運行的:

http://img1.sycdn.imooc.com//5e6612ce0001335912310764.jpg

但是結果我不太明白,還有一個問題為什么我輸出f的時候啥都沒有?f不應該是fectorial(10)這個函數么 ?

還有一個問題,這個寫法是固定的么?(第一個函數參數是@xxx(a)的a,第二個函數參數一定是@xxx修飾的函數,第三個函數的參數一定是函數factorisl的參數)?

這些地方有點不太明白,請教大佬可否幫我理解一下...

正在回答

2 回答

對于第一個問題:

可以解析代碼的執行過程

@decorator('ms')? 其實就等于factorial = decorator('ms')(factorial)

factorial = decorator('ms')(factorial)這句代碼 執行是先執行decorator('ms')按返回 su函數名-->接著執行su(f) 返回ssu函數名?? 到這里就等于?? factorial=ssu

之后調用factorial 其實是調用ssu 即factorial(10)? ->ssu(10)

而在ssu 的執行順序是? print "x=",x? …… return r?? -->執行 factorial(10)的原函數

所以整個執行就是你的輸出結果


第二問題嘛,寫法應該是固定的 不過函數名是可變的。當然咱不是大佬,所以如果有其它的特殊用法也就不太清楚了。

原因嘛就是 :

第一層def? 即標簽名函數 要傳參

第二層def? 即裝飾器函數 要傳被裝飾的函數名

第三層def 即函數別名? 即是第二層要返回的裝飾后的函數




1 回復 有任何疑惑可以回復我~
直接在頁面上輸出f是不會有結果的,在編譯器環境下會輸出f的函數類型,不會輸出f的名字,要知道輸出的f是什么可以用f.__name__。

f只是裝飾器定義的一個參數,可以改成其他的非關鍵字,比如func1,f1等。

第一層函數是調用裝飾器時傳入的參數(unit/ms/s),第二層函數傳入的是調用裝飾器的函數(factorial),第三層函數傳入的是調用裝飾器的函數(factorial)的參數(n)。

以上是我的理解。。
0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

代碼執行邏輯為是什么樣子的?

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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