python之路 裝飾器

2022-08-14 22:24:23 字數 1705 閱讀 5744

1.1什麼是裝飾器:裝飾器是由函式去生成的,用於裝飾某個函式或方法或類,他可以讓這個函式在執行之前或者執行之後做一些操作

先定義乙個函式 func

def func(arg):

print(arg)

func('hello  world')

*************執行結果為列印 hello world***************

現在在執行func 函式前後執行一些操作,就可以建立乙個裝飾器來實現:

ps:(這可是乙個完美的裝飾器),背下來  以後用就往裡套就可以了

def decorator(func):#

建立 乙個裝飾器函式,接受的引數arg引數就是func函式名

def inner(*args,**kwargs):

print('

執行函式之前要新增的函式')

ret=func(*args,**kwargs)

return

ret

return

ret@decorator

#語法糖 如果 要讓某個函式使用裝飾器,只需要在這個函式上面加上@+裝飾器名

deffunc(arg):

print

(arg):

fucn(

'hello world

')裝飾裝飾千

裝飾器函式

裝飾之後輸出結果為:

執行函式之前加的**

hello world

執行函式之後加的**

這就是乙個能hold住所有函式傳參的裝飾器

1.2對擴充套件是開放的,我們允許 **的擴充套件和新增新的功能

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

def

definner():

print('')

func()

print('')

return

inner

def

definner():

print('')

func()

print('')

return

inner

deff():

print('

in f')

f()多個裝飾器裝飾同乙個函式

多個裝飾器

你有成千上萬個函式使用了乙個裝飾器,現在你想把這些裝飾器都取消掉,你要怎麼做?

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()

帶引數的裝飾器開關

開關

python之路 裝飾器

def login1 login type print login type login type defauth1 args print 處理過程1 defauth2 args print 處理過程2 return auth2 return auth1 login1 qq home login1 ...

python之路 裝飾器

python裡面的動態 存在的意義 在不破壞原有的函式和原有函式的呼叫基礎上,給函式新增新的功能 fn是目標函式.def inner args,kwargs 為了目標函式的傳參 在執行目標函式之前.ret fn args,kwargs 呼叫目標函式,ret是目標函式的返回值 在執行目標函式之後.re...

python之路(7)裝飾器

前言 裝飾器 為函式新增附屬功能,本質為函式 原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器 高階函式 函式巢狀 閉包 定義下面函式 def cal l res 0 for i in l time.sleep 0.1 res 1return res 想要實現檢測函式的執行時間 imp...