装饰器
装饰器
1.装饰器的固定格式
def timer(func):
def inner(*args,**kwargs):
'''执行函数之前要做的'''
re = func(*args,**kwargs)
'''执行函数之后要做的'''
return re
return inner
补充: 装饰器修复
2.装饰器的本质
装饰器是一个闭包函数
在不修改原函数及其调用方式的情况下对原函数功能进行扩展
开放封闭原则
1.对扩展是开放的
任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能。
2.对修改是封闭的
因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。
装饰器完美的遵循了这个开放封闭原则。
示例
import time def timer(func): def inner(*args,**kwargs): start_time = time.time() ret = func(*args,**kwargs) end_tiame = time.time() print(end_tiame - start_time) return ret return inner @timer def zhou(a,b): time.sleep(0.1) print('老板万岁') return a+b haha = zhou(1,2) print(haha)
def diaoyong(func): def inner(*args,**kwargs): print ('正在调用%s函数'%(func.__name__)) ret = func(*args,**kwargs) return ret return inner @diaoyong def welcome(name): return 'welcome%s'%name a = welcome('周军豪') print(a)
func.__name__
正在调用的函数名
既然选择了远方,便是风雨兼程...