一个闭包函数闭包
装饰器的功能:在不修改原函数及其调用方式的状况下对原函数功能进行扩展函数
装饰器原理: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
二、对修改是封闭的原理
为何要对修改封闭呢?扩展
就像咱们刚刚提到的,由于咱们写的一个函数,颇有可能已经交付给其余人使用了,若是这个时候咱们对其进行修改,颇有可能影响其余已经在使用该函数的用户。程序
装饰器完美的遵循这个开放封闭原则。