python裝飾器詳解

2021-09-16 11:55:26 字數 1822 閱讀 3937

​ 器:指的是具備某一功能的工具

​ 裝飾:指的是為被裝飾器物件新增新功能

​ 裝飾器:就是用來為被裝飾物件新增新的功能的工具

​ 注意:裝飾器本身可以是任意可呼叫物件,被裝飾器的物件也可以是任意可呼叫物件

開放封閉原則 不改變呼叫方式和不修改源**基礎上增加功能

不修改被裝飾物件(函式)的源**。- 封閉

不修改被裝飾物件(函式)的呼叫方式 - 開發

無參裝飾器

import time

deftimmer

(func)

:def

(*args,

**kwargs)

: start_time=time.time(

) res=func(

*args,

**kwargs)

stop_time=time.time(

)print

('run time is %s'

%(stop_time-start_time)

)return res

@timmer

deffoo()

: time.sleep(3)

print

('from foo'

)foo(

)

有參裝飾器
def

auth

(driver=

'file'):

defauth2

(func)

:def

(*args,

**kwargs)

: name=

input

("user: "

) pwd=

input

("pwd: "

)if driver ==

'file'

:if name ==

'egon'

and pwd ==

'123'

:print

('login successful'

) res=func(

*args,

**kwargs)

return res

elif driver ==

'ldap'

:print

('ldap'

) return auth2

@auth(driver=

'file'

)def

foo(name)

:print

(name)

foo(

'egon'

)

@語法糖
def

outer

(f):

definner()

: f(

)print

("新增功能1"

)return inner

defwrap

(f):

definner()

: f(

)print

("新增功能2"

)return inner

@wrap # 被裝飾的順序決定了新增功能的執行順序

@outer # = outer(fn): inner

deffn()

:print

("原有功能"

)# 解釋@語法時順序是從下到上

# 而執行裝飾器內的那個inner函式時的是自上而下

python裝飾器 python 裝飾器詳解

def outer x def inner y return x y return inner print outer 6 5 11 如 所示,在outer函式內,又定義了乙個inner函式,並且inner函式又引用了外部函式outer的變數x,這就是乙個閉包了。在輸出時,outer 6 5 第乙個...

python裝飾器詳解 python裝飾器詳解

按照 python 的程式設計原則,當乙個函式被定義後,如要修改或擴充套件其功能應盡量避免直接修改函式定義的 段,否則該函式在其他地方被呼叫時將無法正常執行。因此,當需要修改或擴充套件已被定義的函式的功能而不希望直接修改其 時,可以使用裝飾器。先來看乙個簡單的例子 def func1 functio...

詳解Python裝飾器

裝飾器的難點 在梳理了裝飾器的整個內容之後,我認為難點不是裝飾器本身,而是直接呼叫被裝飾的函式,讓人無法理解背後究竟發生了什麼。一 引出裝飾器概念 引入問題 定義了乙個函式,想在執行時動態的增加功能,又不想改動函式本身的 示例 希望對下列函式呼叫增加log功能,列印出函式呼叫 def f1 x re...