Python基礎 裝飾器(Decorator)

2021-10-01 01:31:11 字數 2559 閱讀 1606

裝飾器(decorators)是python的乙個重要部分,相信大多初學者難以理解,這裡會分享裝飾器具體的一些用法

定義在**執行期間動態增加功能的方式,稱之為「裝飾器」(decorator)

裝飾器實際上就是乙個閉包,把乙個函式當做函式引數傳入,然後返回乙個替代版函式,本質上就是乙個返回函式的高階函式

簡單的裝飾器

def

outer

(func)

:def

inner()

:print

("*********"

)return func(

)return inner

@outer

defnow()

:print

("2019-06-13"

)now(

)

從上面的**我們可以知道裝飾器的乙個語法,如下:

def

outer

(func)

:def

inner()

:#增強的功能

#在內函式中執行func函式

return func(

)return inner

@outer

deffunc()

: 函式體

在裝飾器中,分為外函式(outer)與內函式(inner)

外函式(outer):

1.將被裝飾的函式(func)傳遞進來

2.將裝飾好的函式(inner)返回給呼叫者

內函式(inner):

1.新增動態增加的功能

2.執行被裝飾的函式

內函式中return什麼時候可以省略?

注意:當被裝飾的函式沒有返回值的時候,內函式的return可以省略;若被裝飾的函式中存在返回值,則內函式的return則不能省略。

@的功能:將被裝飾的函式的函式名作為引數傳遞給外函式,將外函式返回的替代版的函式賦值給原本的函式。

帶引數的裝飾器

裝飾器允許傳入引數,具體語法如下:

def

outer

(func)

:def

inner

(引數列表)

:#新增增加的功能

return func(引數列表)

return inner

@outer

deffunc

(引數列表)

: 函式體

注意:

1.使用內函式來接收被裝飾函式的引數

2.呼叫被裝飾的函式的時候,需要將引數傳遞進去。

案例1:使用裝飾器,給getage函式新增乙個對年齡的限制,年齡[0,160]

def

getage

(age)

:print

("您的年齡為%d"

% age)

具體實現**如下:

def

outer

(func)

:def

inner

(age)

:if age >=

0and age <=

160:

func(age)

else

:print

("年齡有誤"

)return inner

@outer

defgetage

(age)

:print

("您的年齡為%d"

% age)

getage(

100)

#您的年齡為100

getage(

200)

#年齡有誤

案例2:使用裝飾器,給getmoney函式新增乙個對金額的限制:1.必須全是數字 2.必須大於0

def

getmoney

(mon)

:return

int(mon)

具體實現**如下:

def

moneydec

(func)

:def

inner

(mon)

:if mon.isdecimal():

return func(mon)

else

:print

("金額有誤"

)return inner

@moneydec

defgetmoney

(mon)

:return

int(mon)

print

(getmoney(

"123"))

print

(getmoney(

"-123"))

print

(getmoney(

"xyz"

))

執行結果如下:

123

金額有誤

none

金額有誤

none

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