一、什麼是裝飾器?
裝飾器他人的器具,本身可以是任意可呼叫物件,被裝飾者也可以是任意可呼叫物件。
二、強調裝飾器的原則:
1 不修改被裝飾物件的源**
2 不修改被裝飾物件的呼叫方式
3:在遵循1和2的前提下,為被裝飾物件新增上新功能
三、裝飾器的使用:
import time無引數的裝飾器def timmer(func):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print(
'run time is %s
' %(stop_time-start_time))
return
res
return
@timmer # 相當於 foo =timmer(foo)
def foo():
time.sleep(3)
print(
'from foo')
foo()
def add(adds): #新增乙個引數,接收裝飾器傳來的值帶引數的裝飾器def decor(func):
print(adds)
def inner(*arg , **kw):
print(
'我是函式decor')
result = func(*arg , **kw)
print(adds) #列印裝飾器中的值
return
result
return
inner
return
decor #閉包
# @decor show =decor(show)
@add(
'我是新加的引數adds
') #相當於返回decor函式,return
decor
def show(*arg , **kw):
print(
'我是函式show')
print(
'我是函式show中的引數name:
',arg,'
我是函式show中的引數age:
',kw)
return
'我是函式show中的返回值
'ret= show(*'
xiaobo
' , **) #*把'
xiaobo
'轉換為元組 ,**把字典傳進去
print(ret)
def decor(func):被修飾的函式需要引數def inner(name,age):
print(
'我是decor
') # 在函式之前執行的功能
return
func(name,age) # 被裝飾的函式
return
inner
@decor
def show(name , age):
print(
'我是函式show')
print(
'我是函式show中的引數name:
',name,'
我是函式show中的引數age:
',age)
return
'我是函式show中的返回值
'show(
'alex
',20)
python裝飾器複習
裝飾器是python中比較重要的乙個概念,要理解裝飾器,先理解下變數的作用域 閉包 閉包函式。簡單用個閉包函式舉例 def func v name hello world def function print v name return function func 參考下面的執行結果,在func 函...
複習裝飾器
def timefun arg pre hello def timefunc function def inner print 10086 print pre function return inner return timefunc timefun arg 100866666666 def tes...
複習 裝飾器
1 2 裝飾器的作用 3引入日誌 4函式執行時間的統計 5執行函式前預備處理 6執行函式後清理功能 7許可權校驗等場景8快取 9 1011 定義乙個函式,遵循閉包原則 函式作為引數 12def decorator func 13 定義乙個裝飾器函式 14 print func 函式開始 15def1...