一個閉包函數閉包
裝飾器的功能:在不修改原函數及其調用方式的狀況下對原函數功能進行擴展函數
裝飾器原理:spa
def func(): print('xxx') def outer(f): # outer(f) = outer(func) def inner(): set = f() # set = func() return set return inner # func() = inner() func = outer(func) func() xxx
裝飾器完整形態:設計
def outer(flge): def inner(*args, **kwargs): set = inner(*args, **kwargs) return set return inner @outer def func(): pass print(func())
一、對擴展是開放的code
爲何要對擴展開放呢?blog
咱們說,任何一個程序,不可能在設計之初就已經想好了全部的功能而且將來不作任何更新和修改。因此咱們必須容許代碼擴展、添加新功能。class
二、對修改是封閉的原理
爲何要對修改封閉呢?擴展
就像咱們剛剛提到的,由於咱們寫的一個函數,頗有可能已經交付給其餘人使用了,若是這個時候咱們對其進行修改,頗有可能影響其餘已經在使用該函數的用戶。程序
裝飾器完美的遵循這個開放封閉原則。