python fullstack基礎 七 裝飾器

2021-08-14 04:04:22 字數 2453 閱讀 4970

# ①引子——為什麼要有裝飾器

為了在不修改原函式的基礎上為函式新增新功能,產生了裝飾器

# ②簡單裝飾器

defdeco

(f):

def():

"""原函式前新增的功能"""

f()"""原函式後新增的功能"""

deffunc

(): print('這是原函式!')

func = deco(func)

func()

# ③裝飾器的語法糖

defdeco

(f):

def():

"""原函式前新增的功能"""

f()"""原函式後新增的功能"""

@deco # ——>此處效果等同於 func = deco(func)

deffunc

(): print('這是原函式')

func()

# ④帶返回值的裝飾器

defdeco

(f):

def():

"""原函式前新增的功能"""

res = f()

"""原函式後新增的功能"""

return res

@deco

deffunc

(): print('這是原函式')

func()

# ⑤帶引數、帶返回值的裝飾器

defdeco

(f):

def(*args,**kwargs):

"""原函式前新增的功能"""

res = f(*args,**kwargs)

"""原函式後新增的功能"""

return res

@deco

deffunc

(*args,**kwargs):

print('這是原函式')

func(*args,**kwargs)

# ⑥多層裝飾器

# todo

# ⑦多個裝飾器修飾同乙個函式

# todo

def

deco

(f):

def(*args,**kwargs):

"""原函式前新增的功能"""

res = f(*args,**kwargs)

"""原函式後新增的功能"""

return res

@deco

deffunc

(*args,**kwargs):

pring('這是原函式')

func(*args,**kwargs)

from functools import wraps

defdeco

(func):

@wraps(func) #加在最內層函式正上方

def(*args,**kwargs):

return func(*args,**kwargs)

@deco

deforigin_func

():'''

這是原函式的注釋

:return:

'''print('這是原函式')

print(origin_func.__name__)

>>> origin_func

print(origin_func.__doc__)

>>> 這是原函式的注釋

>>> :return:

def

outer

(flag):

deftimer

(func):

definner

(*args,**kwargs):

if flag:

print('''執行函式之前要做的''')

re = func(*args,**kwargs)

if flag:

print('''執行函式之後要做的''')

return re

return inner

return timer

# 此處先執行函式呼叫outer(false) —> 返回timer —>@timer —>func = timer(func) —> func = inner

@outer(false)

deffunc

(): print(111)

func()

def

(func):

definner1

(): func()

return inner1

def(func):

definner2

(): func()

return inner2

deff

(): print('in f')

f()# 結果

>>>

in f

Python基礎第七天 裝飾器

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件 裝飾器的應用場景 比如插入日誌,效能測試,事務處理,快取等等場景 現在我有乙個需求,我想讓你測試這個函式的執行時間,在不改變這個函式 的情況下 import time ...

設計模式(七)裝飾模式

裝飾模式介紹 裝飾模式是結構型設計模式之一,不必改變類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能,是繼承的替代方案之一。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。定義動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。裝飾模式結構圖 裝飾模式在現實生...

設計模式《七》 裝飾模式

顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項。component 抽象介面,可以給這些物件動態地增加職責。concretecomponent component的具體物件,也可以對這個物件新增一下職責。decor...