python 裝飾器
1) 2層裝飾器
def
decorator
(func)
:# todo
def(
*args,
**kwargs)
:# todo
func(
*args,
**kwargs)
# todo
# todo
3層裝飾器
'''
'''def
decorator3
(a=0
, b=0)
:# todo
def(func)
:# todo
def(
*args,
**kwargs)
:# todo
func(
*args,
**kwargs)
# todo
# todo
# todo
此處a,b可為任意指定引數,但不可以更改。
3) 類裝飾器, python中類本身是不可呼叫的, 需要實現__call__方法, 將類變為callable。
class
decorator
(object):
def__init__
(self, func)
: self.func = func
def__call__
(self,
*args,
**kwargs)
:# todo
self.func(
*args,
**kwargs)
# todo
'''
'''class
decorator2
(object):
def__call__
(self, func)
:# todo
def(
*args,
**kwargs)
:# todo
func(
*args,
**kwargs)
# todo
# todo
'''
'''import time
deflog
(level=
"info"):
print
"log"
def(f)
:print
def(
*args,
**kwargs)
:print
print
": "
.format
(level, time.time())
f(*args,
**kwargs)
print
": "
.format
(level, time.time())
print
print
print
"end"
deflog2
(f):
print
"log2..."
def(
*args,
**kwargs)
:print
"log2"
f(*args,
**kwargs)
print
"log2"
print
"log2..."
@log2
@log(level=
"debug"
)def
test
(a, b)
:print a, b
執行test,輸出
參見:結果如上圖所示。
Python 裝飾器執行順序
nisen的 python 裝飾器執行順序迷思 原址 裝飾器是python用於封裝函式或 的工具,網上可以搜到很多文章可以學習,我在這裡要討論的是多個裝飾器執行順序的乙個迷思。大部分涉及多個裝飾器裝飾的函式呼叫順序時都會說明它們是自上而下的,比如下面這個例子 def decorator a func...
Python 裝飾器執行順序
之前同事問到兩個裝飾器在 中使用順序不同會不會有什麼問題,裝飾器是對被裝飾的函式做了一層包裝,然後執行的時候執行了被包裝後的函式,例如 def decorator a fun def inner a args,kwargs print inner a return fun args,kwargs r...
Python 裝飾器執行順序迷思
裝飾器是python用於封裝函式或 的工具,網上可以搜到很多文章可以學習,我在這裡要討論的是多個裝飾器執行順序的乙個迷思。大部分涉及多個裝飾器裝飾的函式呼叫順序時都會說明它們是自上而下的,比如下面這個例子 def decorator a func print get in decorator a d...