1. 程式人生 > >python基礎知識之裝飾器wrapper

python基礎知識之裝飾器wrapper

裝飾器的作用:

           不想修改函式的呼叫方式但是又想在原來的函式前後新增新的功能

裝飾器的原則:開放封閉原則

            對擴充套件是開放的 

            對修改是封閉的

裝飾器語法糖:在被修飾函式頭上新增@裝飾器名

1.裝飾器固定模式

def werpper(func):
    def inner(*args,**kwargs):
       ret
=func(*args,**kwargs) return ret return inner @werpper def dom(): print("") return "" dom()
View Code

2.完美模式

from functools import wraps
def werpper(func):
    @wraps()#為了獲取原函式資訊 例如dom.__name_獲取原函式名_  dom.__doc__獲取原函式資訊
    def inner(*args,**kwargs):
       ret
=func(*args,**kwargs) return ret return inner @werpper def dom(): print("") return "" dom()
View Code

3.帶引數裝飾器

from functools import wraps
def demo(**kwargs):
  def werpper(func):
    @wraps()#為了獲取原函式資訊 例如dom.__name_獲取原函式名_  dom.__doc__獲取原函式資訊
    def inner(*args,**kwargs):
       ret
=func(*args,**kwargs) return ret return inner @demo("任何資料型別") def dom(): print("") return "" dom()
View Code

4.多個裝飾器修飾一個函式

from functools import wraps
def demo2(**kwargs):
  def werpper(func):
    @wraps()#為了獲取原函式資訊 例如dom.__name_獲取原函式名_  dom.__doc__獲取原函式資訊
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner



def demo1(**kwargs):
  def werpper(func):
    @wraps()#為了獲取原函式資訊 例如dom.__name_獲取原函式名_  dom.__doc__獲取原函式資訊
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner

@demo2("任何資料型別")
@demo1("任何資料型別")
def dom():
    print("")
    return ""
dom()
"""執行順序套娃形式
demo2  func()前-—>  demo1  func()前——>func()——>demo1  func()後——>demo2  func()後
"""
View Code