python 之裝飾器 演變過程

2021-08-26 12:05:28 字數 1758 閱讀 1076

需求如下

專案中定義了兩個函式foo和bar 這是公共函式。現在需要在調取這兩個函式的基礎上 計算函式執行的時間。(原則不修改foo和bar函式)

演變一:

這種方式是直接在原函式的內部修改源** 太過於簡單 就不寫了。這種方式缺點太多,涉及到直接修改函式原始碼了。方式不可取。

演變二

import time

deffoo

(): time.sleep(1)

print('foo......')

defbar

(): time.sleep(1)

print('bar......')

defshow_time

(f):

start_time = time.time()

f()end_time = time.time()

print('spend time %s'%(end_time - start_time))

show_time(bar)

結論 :如果想要調取foo 那就直接調取show_time(foo) 如果想要調取bar 直接show_time(bar) 即可。但是目前的缺陷是:本來是調取foo 現在變成調取show_time 改變了調取的方式。雖然實現了功能但是改變函式名是不可取的。

演變三

import time

deffoo

(): time.sleep(1)

print('foo......')

defbar

(): time.sleep(1)

print('bar......')

defshow_time

(f):

definner

(): start_time = time.time()

f()end_time = time.time()

print('spend time %s'%(end_time - start_time))

return inner

foo = show_time(foo)

bar = show_time(bar)

foo()

bar()

結論:功能基本上已經實現 但是這種寫法 不好看,每乙個函式都需要進行賦值。

演變四

import time

defshow_time

(f):

definner

(): start_time = time.time()

f()end_time = time.time()

print('spend time %s'%(end_time - start_time))

return inner

@show_time # foo = show_time(foo)

deffoo

(): time.sleep(1)

print('foo......')

@show_time # bar = show_time(bar)

defbar

(): time.sleep(1)

print('bar......')

foo()

bar()

結論:這就是最終的方式

mysql架構演變過程

我們小組研究的是mysql,今天由小帥給大家分享我們組的研究成功,我沒有做什麼突出貢獻,主要的技術點都是小帥沒日沒夜研究的,我也就幫忙做了個背景介紹,今天先總結一下mysql的架構之路,明天我也好好的研究一下主從複製什麼的,爭取在貢獻一篇部落格給大家參考 mysql是由原mysql ab公司自主研發...

網路架構及其演變過程

目錄三 bs架構 四 cs架構和bs架構區別 python從入門到放棄完整教程目錄 應用領域 應用領域 計算機發展初期使用者去取資料,直接就去主機拿,從這裡開始就分出了客戶端和服務端。客戶端 使用者安裝的軟體 服務端 統一管理資料庫的主機中的軟體就叫做服務端,再後來服務端不只是管理資料,外加處理業務...

網路架構及其演變過程

應用領域 應用領域 計算機發展初期使用者去取資料,直接就去主機拿,從這裡開始就分出了客戶端和服務端。客戶端 使用者安裝的軟體 服務端 統一管理資料庫的主機中的軟體就叫做服務端,再後來服務端不只是管理資料,外加處理業務邏輯。答 應用領域 統一客戶端即預設安裝使用者電腦中的瀏覽器,訪問同種類的 具體業務...