```python3
def fn(old):
def new_fun(*args, **kwargs):
print("开始装饰")
result = old(*args, **kwargs)
print("装饰结束")
return result
return new_fun
@fn
def say_hello():
print("大家好~~~")
say_hello()
```
窗口程序中的应用
```python3
import traceback
def run_with_exc(f):
"""窗口运行出现错误时,用messagebox把错误信息显示出来"""
def call(window, *args, **kwargs):
try:
return f(window, *args, **kwargs)
except Exception:
exc_info = traceback.format_exc()
QMessageBox.about(window, '错误信息', exc_info)
return call
class GomokuWindow(QMainWindow):
@run_with_exc
def paintEvent(self, e):
```
带参数的三层装饰器
```python3
def timmer_out(flag):
def timmer(func):
def inner(*args, **kwargs):
if flag:
start = time.time()
ret = func(*args, **kwargs)
end = time.time()
print(end-start)
return ret
else:
ret = func(*args, **kwargs)
return ret
return inner
return timmer
```
联系客服