python基礎 裝飾器(一)

2022-08-17 23:03:21 字數 2641 閱讀 3901

裝飾器:裝飾器是乙個函式,可以讓其它函式在不改變**及呼叫方式的前提下,為函式增加其它功能。

為什麼要有裝飾器?因為程式上線以後,如果直接對函式**進行修改,會造成很多意想不到的問題,這就需要裝飾器了。

裝飾器需要:1高階函式。2函式巢狀。3閉包——即變數的作用域

如何寫裝飾器?先看需求,任意累加函式增加列印執行時間功能

import

time

defcal(l):

start_time =time.time()

res =0

for i in

l: time.sleep(0.01)

res = res +i

end_time =time.time()

print

(res)

print('

函式的執行時間是%s

上面這個是在原始碼上修改的,肯定不行!!!

1先複習下高階函式:傳入引數是函式,或返回值是函式

a傳入引數是函式

def

foo():

print('

from foo')

deftest(func):

print(func) #

列印func記憶體位址

func()#

執行func函式

修改了foo呼叫方式了,本來呼叫方式為foo(),現在是在函式內func()呼叫

b返回值是函式

def

foo():

print('

from foo')

deftest(func):

return func#

返回函式

res = test(foo)#

用res接收返回值

res()

import

time

deffoo():

print('

from foo')

deftimer(func):

start_time=time.time()

func()

end_time=time.time()

print('

函式的執行時間是%s

'%(start_time-end_time))

return func#

返回函式

res = timer(foo)#

用res接收返回值

函式執行了兩次,還需要修改

import

time

deffoo():

print('

from foo')

time.sleep(1)

deftimer(func):

def start_time=time.time()

func()

end_time=time.time()

print('

函式的執行時間是%s

'%(end_time-start_time))

foo = timer(foo) #

foo() #

#裝飾器成功了

可用@timer代替,寫在要修改的函式上一行即可,呼叫的timer函式要寫在foo函式之前

完全修改後**如下:

import

time

deftimer(func):

def start_time =time.time()

func()

end_time =time.time()

print('

函式的執行時間是%s

' % (end_time -start_time))

@timer

deffoo():

print('

from foo')

time.sleep(1)

foo() ##

裝飾器成功了

裝飾器的核心就是:裝飾器函式的return是子函式,並用要修改的其它函式名來接收。表面看是執行其它函式,實際上是執行接收的返回函式-子函式。

python基礎 裝飾器

裝飾器本質就是函式,功能是為其他函式新增附加功能。原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 import time 定義乙個裝飾器計算函式執行時間 def timer func start time time.time res fun...

python基礎 裝飾器

裝飾器形成的過程 最簡單的裝飾器 有返回值的 有乙個引數 萬能引數 裝飾器的作用 原則 開放封閉原則 語法糖 裝飾器的固定模式 import time print time.time 獲取當前時間 time.sleep 10 讓程式在執行到這個位置的時候停一會兒 def timmer f 裝飾器函式...

Python基礎 裝飾器

裝飾器是程式開發中經常會用到的乙個功能,程式開發的基礎知識,用好了裝飾器,開發效率如虎添翼,所以這也是python面試中必問的問題,但對於好多初次接觸這個知識的人來講,這個功能有點繞,這個都不會,別跟人家說你會python,看了下面的文章,保證你學會裝飾器。裝飾器 decorator 首先我們需要知...