python 基礎 裝飾器

2022-03-27 03:53:46 字數 1355 閱讀 6763

python 的裝飾器,其實用到了以下幾個語言特點:

第1點,一切皆物件,包括函式。函式也是個物件,所以函式這個物件可以和其他任何物件一樣被賦值給其它變數,包括作為實數傳遞給函式。

第2點,在函式中可以再定義乙個函式,並且,結合第1點,函式是個物件,那麼巢狀定義的函式,還可以被作為函式執行結果返回,也就是 return object。

第3點,類似 js 的特性,就是在巢狀定義的函式銷毀前,其外層函式的函式作用域一直存在。

第4點,則是為了處理引數上的方便。

def

decorator(func):

outer = '

外層函式作用域定義的區域性變數

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

print

outer

print

args

print

kwargs

return

inner

@decorator

def func(*args, **kwargs):

print

'hello world'#

以上裝飾器作用等價於:

new_func =decorator(func)

func(1, 2, 3, a='

one', b='

two'

)new_func(1, 2, 3, a='

one', b='

two')#

外層函式作用域定義的區域性變數

#(1, 2, 3)##

外層函式作用域定義的區域性變數

#(1, 2, 3)

#

帶引數的裝飾器,其實是相當於又多了一層巢狀定義,裝飾器函式返回的也是乙個裝飾器函式。

def

decorator(info):

defreally_dec(func):

outer =info

def inner(*args, **kwargs):

print

outer

print

args

print

kwargs

return

inner

return

really_dec

@decorator(

'我是裝飾器引數')

def func(*args, **kwargs):

print

'hello world

'func(1, 2, 3, a='

one', b='

two')#

我是裝飾器引數

#(1, 2, 3)

#

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