装饰器
装饰器的特点:
用户感觉不到装饰器的存在
在一个函数前后唐家功能
本身的函数不会改变
开放封闭原则
开放 对于扩展是开放的
封闭 对于修改是封闭的
装饰器的基本结构
def wrapper(func): def inner(*args,**kwargs): #被装饰函数执行之前的操作 ret=fanc(*args,**kwargs) #被装饰函数执行之后的操作 return ret return inner @wrapper def f(*argument): pass
例子
------------------------------------------------------------------------------------------------------- # import time # def timmer(F): # 装饰器 # def inner(): # start_time=time.time() # F() # end_time=time.time() # print(end_time-start_time) # return inner # # @timmer # F=timmer(F) # 语法糖 # def F(): # sum=0 # for i in range(1,100000): # sum+=i # 被装饰的函数 # F() # 直接调用函数,还可以加上装饰器的功能 # -------------------------------------------------------------------------------------------------------
例二
# def wrapper(func): # def inner(*args): # print('你正在调用%s函数'%(func.__name__)) # re=func(*args) # return re # return inner # # @wrapper # def welcome(name): # print('welcome: %s'%name) # @wrapper # def home(): # print('欢迎来到home页!!') # # home() # print('') # welcome('alex')
带参数的装饰器 ( 批量 使用装饰器)
# def outter(flag): # def wrapper(func): # def inner(*args,**kwargs): # if flag: # pass # # 装饰功能 # re=func(*args,**kwargs) # if flag: # pass # # 装饰功能 # # return re # return inner # return wrapper # @outter(False) # def fun1(): # print('Apple') # # fun1()