python函数-装饰器
生活随笔
收集整理的這篇文章主要介紹了
python函数-装饰器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python函數-裝飾器
1.裝飾器的原則--開放封閉原則
?開放:對于添加新功能是開放的
封閉:對于修改原功能是封閉的
2.裝飾器的作用
在不更改原函數調用方式的前提下對原函數添加新功能
3.裝飾器的本質--閉包
4.裝飾器
(1)簡單的裝飾器
def deco(f):def wrapper():"""原函數前添加的功能"""f()"""原函數后添加的功能"""return wrapperdef func():print('這是原函數!')func = deco(func) func()(2)裝飾器的語法糖-----@deco
def deco(f):def wrapper():"""原函數前添加的功能"""f()"""原函數后添加的功能"""return wrapper@deco # ——>此處效果等同于 func = deco(func) def func():print('這是原函數')func()(3)帶返回值的裝飾器
def deco(f):def wrapper():"""原函數前添加的功能"""res = f()"""原函數后添加的功能"""return resreturn wrapper@deco def func():print('這是原函數') func()(4)裝飾器加參數的固定格式
def deco(f):def wrapper(*args,**kwargs):"""原函數前添加的功能"""res = f(*args,**kwargs)"""原函數后添加的功能"""return resreturn wrapper@deco def func(*args,**kwargs):print('這是原函數') func()(5)裝飾器的固定格式--wraps版
from functools import wrapsdef wrapper(func):@wraps(func)def inner(*args,**kwargs):print('在被裝飾的函數執行之前做的事')ret = func(*args,**kwargs)print('在被裝飾的函數執行之后做的事')return retreturn inner @wrapper def holiday(day):print("新年快樂")return '好開心' print(holiday.__name__) print(holiday.__doc__) ret = holiday(3) print(ret)>>>> holiday None 在被裝飾的函數執行之前做的事 新年快樂 在被裝飾的函數執行之后做的事 好開心
(6) 多個裝飾器裝飾一個函數
def wrapper1(func):def inner1():print('wrapper1 ,before func')func()print('wrapper1 ,after func')return inner1def wrapper2(func):def inner2():print('wrapper2 ,before func')func()print('wrapper2 ,after func')return inner2@wrapper2 # 將inner1進行裝飾,即inner1 = wrapper2(inner1) = inner2 @wrapper1 # 先執行這個裝飾器,即f = wrapper1(f) = inner1 def f():print('in f')f()>>>> wrapper2 ,before func wrapper1 ,before func in f wrapper1 ,after func wrapper2 ,after func
轉載于:https://www.cnblogs.com/a438842265/p/8467705.html
總結
以上是生活随笔為你收集整理的python函数-装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HBase权威指南
- 下一篇: Web前端性能优化——CSS优化