一、通用裝飾器回顧
def inner(*args,**kwargs):
'執行目標函式之前要執行的內容
'ret = func(*args,*kwargs)
'執行目標函式之後要執行的內容
'return
ret
return
inner
def target_func():
print(
'我是目標函式')
#呼叫目標函式
二、函式的有用資訊
1、給函式新增注釋:說明函式的意義
#def eat(food):
#"""
#吃函式: 把傳遞進來的內容吃掉 #函式的注釋,就是這個函式是幹嘛的
#:param food: 食物 #引數 food 是什麼意思
#:return: none #返回什麼東西
#"""
#print("我要吃", food)
#eat("烤肉")
2、獲取函式的相關資訊
defeat(food):
"""吃函式
:param food:水果
:return:
"""print('
我要吃'
,food)
eat('西瓜
')print(eat.__doc__
) #獲取函式的文件注釋 函式名._doc_
print(eat.__name__
) #獲取函式名稱 函式名._name_
執行結果:
我要吃 西瓜
吃函式:param food:水果
:return
:
eat
from functools importwraps #引入函式模組
def @wraps(fn)
#這個**的作用. 把inner的__name__ __doc__ 替換成fn的__name__
def inner(*args, **kwargs):
print("
我是前面")
ret = fn(*args, **kwargs)
print("
我是後面")
return
ret
return
inner
#def
func():
print("
我是func")
func()
print(func.__name__)
三、裝飾器傳參:
from functools importwraps
def
fn: 被裝飾的函式
@wraps(fn)
def inner(*args, **kwargs): #
inner => 最終執行的
if flag ==true:
print("
打**問問金老闆.安全不安全啊")
ret = fn(*args, **kwargs) #
fn 被裝飾的函式
print("
金老闆騙我")
return
ret
else
: ret = fn(*args, **kwargs) #
if 條件不成立,走else
return
ret
return
inner
return
#傳遞true和false來控制裝飾器內部的執行結果
#帶引數的裝飾器的執行流程: 先執行@後面的函式. 然後再加上@ 組裝成語法糖
def yue(): #
inner
print("
約一約"
)yue()
四、多個裝飾器裝飾同乙個函式
def1 第三層裝飾器前def inner(*args,**kwargs):
print('0'
) ret = func(*args,**kwargs)
print('00'
)
return
ret
return
inner
def
def inner(*args,**kwargs):
print('1'
) ret = func(*args,**kwargs)
print('11'
)
return
ret
return
inner
def
def inner(*args,**kwargs):
print('2'
) ret = func(*args,**kwargs)
print('22'
)
print('
222'
)
return
ret
return
inner
deftarget_func():
print('
我是熊貓')
target_func()
執行結果:
2 第二層裝飾器前
0 第一層裝飾器前
我是熊貓
00 第一層裝飾器後
22 第二層裝飾器後
222 第二層裝飾器後
11 第三層裝飾器後
補充裝飾器
1.用functools.wraps隱藏包裝函式 先實現乙個簡單的裝飾器,過濾非負引數 def decorate func def wrap args,kwargs return return wrap myfilter def test args print args is s args 可以發現...
python 裝飾器 補充
在寫python類的時候,雖然可以通過 例項名.變數名 的方式對例項中的變數進行讀取和賦值。但出於規範性等等原因,我們最好還是寫getter和setter,使用property 函式和 property修飾符。第一種方法,使用property 函式 class person def init sel...
Python札記 裝飾器補充
本隨筆是對python札記 裝飾器的一些補充。使用裝飾器的時候,被裝飾函式的一些屬性會丟失,比如如下 usr bin env python def deco func print wrap start func print wrap end n deco def foo docstring for ...