python基礎 裝飾器的使用

2021-10-07 01:18:02 字數 3460 閱讀 5041

特點:

函式a作為引數出現,函式b接收函式a作為引數;

要有閉包的特點。

def

test()

:#宣告函式

print

('**********=test**********=='

)t = test t()

#把函式賦值給t

輸出:

==

====

====

=test==

====

====

==

閉包:

def

func

(number)

: a =

100def

inner_func()

:nonlocal a

nonlocal number

number +=

1for i in

range

(number)

: a +=

1print

(a)return inner_func

f = func(5)

f()

輸出: 106

def

test()

:#宣告函式

print

('**********=test**********=='

)t = test t()

#把函式賦值給t

deffunc

(f):

print

(f) f(

)print

('rrrrrr'

)func(test)

輸出:

>

====

====

===test==

====

====

==rrrrrr

house是被裝飾函式

將被裝飾函式作為引數傳給裝飾器

執行裝飾器函式

將返回值賦值給被裝飾函式

def

decorate

(func)

:def()

: func(

)print

('刷漆'

)print

('裝門')

@decorate

defhouse()

:print

('我是毛坯房'

)house(

)

我是毛坯房

刷漆裝門

示例:

import time 

defdecorate

(func)

:def()

:print

('正在校驗'

) time.sleep(2)

# 休眠2秒

print

('校驗完畢'

) func(

)@decorate

deff1()

:print

('*****==f1'

)f1(

)

輸出:

正在校驗

校驗完畢

====

===f1

注意區別,傳引數:

import time 

defdecorate

(func)

:def

(x):

print

('正在校驗'

) time.sleep(2)

# 休眠2秒

print

('校驗完畢'

) func(x)

# 執行原函式,即f1()

@decorate

deff1

(n):

print

('*****=='

,n)f1(

5)

import time 

defdecorate

(func)

:def

(*args,

**kwargs)

:# 引數個數不確定的時候用*args,字典時用**kwargs

print

('正在校驗'

) time.sleep(2)

# 休眠2秒

print

('校驗完畢'

) func(

*args,

**kwargs)

# 執行原函式,即f1()

@decorate

deff1

(n):

print

('*****=='

,n)@decorate

deff2

(name)

:print

('*****=='

,name)

f1(5

)f2(

'lily'

)

輸出結果

正在校驗

校驗完畢

*****==

5正在校驗

校驗完畢

====

=== lily

如果裝飾器是多層的,先裝離得近的:

裝飾器帶引數:

def

outer

(a):

# 接收裝飾器的引數

defdecorate

(func)

:# 接收函式

def(

*args,

**kwargs)

:# 接收函式的引數

func(

*args,

**kwargs)

print

('鋪地磚{}'

.format

(a))

return decorate# 返回出第二層

@outer(10)

defhouse

(time)

:print

('我{}拿到了房子'

.format

(time)

)house(

'2020'

)

輸出:

我2020拿到了房子

鋪地磚10

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 首先我們需要知...