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

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

python中關于裝飾器的疑問?

python中關于裝飾器的疑問?

Quentin3824726 2017-03-25 12:06:10
# -*- coding: UTF-8 -*-import timedef foo():? ?print 'in foo()'# 定義一個計時器,傳入一個,并返回另一個附加了計時功能的方法def timeit(func):? ?# 定義一個內嵌的包裝函數,給傳入的函數加上計時功能的包裝? ?def wrapper():? ? ? ?start = time.clock()? ? ? ?func()? ? ? ?end = time.clock()? ? ? ?print 'used:', end - start? ?# 將包裝后的函數返回? ?return wrapperfoo = timeit(foo)foo()foo()通過包裝函數,實現了對foo函數的計時功能,疑問1;通過包裝函數后,原來的foo()函數改變了嗎?疑問2:如果后來還要調用原來定義的foo()函數怎么辦?疑問3:同樣是實現計時功能,以下程序不是更方便?而且原foo()函數沒改變?def g(func):? ?start = time.clock()? ?func()? ?end = time.clock()? ?print 'used:', end - startg(foo)
查看完整描述

1 回答

?
ruibin

TA貢獻358條經驗 獲得超213個贊

疑問1;通過包裝函數后,原來的foo()函數改變了嗎?疑問2:如果后來還要調用原來定義的foo()函數怎么辦?是的,改變了。如果你不行foo改變可以把這句foo = timeit(foo)換成foo1 = timeit(foo)然后你調用foo就是原函數,調用foo1就是裝飾過的函數。

疑問3:同樣是實現計時功能,以下程序不是更方便?而且原foo()函數沒改變?裝飾器的作用不是處理一個函數,而是批量處理函數。他能擴展函數的功能,而不改變原函數。這對函數式編程的特殊化定制很有幫助,所以要實現單個功能的函數很簡單,裝飾器的作用是可以抽離出大量與函數功能本身無關的雷同代碼并繼續重用,簡單點說就是重用,這其實就是讓函數更有用!函數最重要的作用就是實現重用~


查看完整回答
反對 回復 2017-03-26
  • 1 回答
  • 0 關注
  • 1356 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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