Python基礎11(函式裝飾器)

2022-05-22 23:06:11 字數 1938 閱讀 1090

import time 模組

time.sleep()  讓程式在執行到這個位置的時候停一會

time.time()  獲取當前時間

@timmer    語法糖  ==  func = timmer(func)

語法糖使用方法

1

import

time

2def

timer(func):

3def inner(*args,**kwargs):

4 start =time.time()

5 re = func(*args,**kwargs)

6print(time.time() -start)

7returnre8

return

inner

910 @timer #

==> func2 = timer(func2)

11def

func2(a):

12print('

in func2 and get a:%s

'%(a))

13return

'fun2 over'14

15 func2('

aaaaaa

','bbbbbb')

16print(func2('

aaaaaa

'))

在不改變函式呼叫方式的基礎上在函式的前、後新增功能。

1

deftimer(func):

2def inner(*args,**kwargs):

3'''

執行函式之前要做的

'''4 re = func(*args,**kwargs)

5'''

執行函式之後要做的

'''6

returnre7

return inner

1.對擴充套件是開放的

為什麼要對擴充套件開放呢?

我們說,任何乙個程式,不可能在設計之初就已經想好了所有的功能並且未來不做任何更新和修改。所以我們必須允許**擴充套件、新增新功能。

2.對修改是封閉的

為什麼要對修改封閉呢?

就像我們剛剛提到的,因為我們寫的乙個函式,很有可能已經交付給其他人使用了,如果這個時候我們對其進行了修改,很有可能影響其他已經在使用該函式的使用者。

裝飾器完美的遵循了這個開放封閉原則。

def

outer(flag):

deftimer(func):

def inner(*args,**kwargs):

ifflag:

print('''

執行函式之前要做的

''')

re = func(*args,**kwargs)

ifflag:

print('''

執行函式之後要做的

''')

return

re

return

inner

return

timer

@outer(false)

deffunc():

print(111)

func()

def

definner():

print('')

func()

print('')

return

inner

def

definner():

print('')

func()

print('')

return

inner

deff():

print('

in f')

f()

結果:顯示現象為!

2 1 1 2

Python基礎 裝飾器(Day11)

裝飾器 1.裝飾器是在不改變原函式的執行的情況下為原函式增額外的功能。簡單版裝飾器 import time deffunc1 print 執行速度 deftimmer f start time time.time f time.sleep 0.3 end time time.time print 此...

Python基礎學習 函式裝飾器

裝飾器是python中非常實用的函式表達法,盡頭我們不講裝飾器原理,只講怎麼應用。裝飾器原理涉及物件導向以及函式本身也可以作為乙個引數被傳遞,原理比較簡單,但由於迴圈巢狀初學者難以理解。既然難以理解,那就先學會怎麼用,有了經驗,理解起來就相對容易了。首先我們要明白,裝飾器內函式是先於被裝飾函式執行的...

Python基礎 6 函式 裝飾器

2.裝飾器 2.3.裝飾器執行時間 2.5.無法除錯 無法獲取元資料 todo 目前不太關心的 閉包 普通物件也可以作為函式使用,即有些物件不是函式,也可以呼叫。例項 lambda x,y x y 5,3 使用場景 注意事項 在匿名函式中繫結變數的值 如果直接使用,則不會記住變數的值,而是跟變數一起...