# 1、什么是装饰器 # 器指的是工具 # 装饰指的是没其他事物添加额外的东西点缀 # 一起的解释就是: 定义一个函数,该函数是用来装饰其他函数添加额外的功能 # 2、为何要用装饰器 # 开放封闭原则 # 开放指的是扩展功能是开放的 # 封闭:指的是对修改源代码是封闭的 # 装饰器就是在不修改被装饰器对象源代码以及调用方式前提下,为被装饰对象添加新功能 # 3、如何用 # 在不修改func函数源代码以及调用的前提下为其添加统计运行时间的功能 # 源代码 # def func(x,y): # print('welcome %s %s to func page'%(x,y)) # func(1,2) # 此代码修改了源代码 # 不适用 # import time # def func(x,y): # start =time.time() # time.sleep(3) # print('welcome %s %s to func page'%(x,y)) # stop=time.time() # print(stop-start) # func(111,222) # import time # time.time #1970 年到现在的时间秒 # 方案二、 # 问题:没有修改装饰对象的调用方式,也没有修改其源代码,并且加上了新功能,但是代码冗余 # import time # def func(x,y): # time.sleep(3) # print('welcome %s %s to func page'%(x,y)) # start=time.time() # func(1,2) # stop =time.time() # print(stop-start) # start=time.time() # func(1,2) # stop =time.time() # print(stop-start) # 方案三、 # 问题:解决了方案二的代码冗余,但带来了新问题,函数的调用方式改变了 # import time # def func(x,y): # time.sleep(3) # print('welcome %s %s to func page'%(x,y)) # def wrapper(): # start=time.time() # func(1,2) # stop =time.time() # print(stop-start) # # wrapper() # 优化方案三之一:如何在方案三点基础上不修改函数的调用方式 # import time # def func(x,y): # time.sleep(3) # print('welcome %s %s to func page'%(x,y)) # # def wrapper(*args,**kwargs): # start=time.time() # func(*args,**kwargs) # stop =time.time() # print(stop-start) # # wrapper(111,222) # 优化方案三之二:在优化一点基础上把被装饰对象写活了,原来只能装饰func # import time # # # def func(x, y): # time.sleep(3) # print('welcome %s %s to func page' % (x, y)) # # # def outter(func): # def wrapper(*args, **kwargs): # start = time.time() # func(*args, **kwargs) # stop = time.time() # print(stop - start) # # return wrapper # # # func = outter(func) # # func(1, 2) #优化方案三之三 将wrapper做的跟被装饰对象一模一样,以假乱真 # import time # # # def home(x, y): # time.sleep(3) # print('welcome %s %s to index page' % (x, y)) # return 123222222 # # # def outter(func): # def wrapper(*args, **kwargs): # start = time.time() # res=func(*args, **kwargs) # stop = time.time() # print(stop - start) # return res # # return wrapper # # # # home = outter(home) # # res=home(1, 2) # # print('返回值',res) #语法: # import time # # def timmer(func): # def wrapper(*args, **kwargs): # start = time.time() # res=func(*args, **kwargs) # stop = time.time() # print(stop - start) # return res # # return wrapper # @timmer # def home(x, y): # time.sleep(3) # print('welcome %s %s to index page' % (x, y)) # return 123222222 # @timmer # def index(name): # time.sleep(2) # print('welcome to %s'%(name)) # # # # res=home(1, 2) # index('loky') # print('返回值',res) #装饰器模板: # def outter(func): # def wrapper(*args,**kwargs): # #1、调用原函数 # #2、为其新增功能 # res=func(*args,**kwargs) # return res # return wrapper # # @outter # def index(): # print('你好!') # # index() def outter(func): def wrapper(*args,**kwargs): #1、调用原函数 #2、为其新增功能 name=input('your name--->:') pwd =input('your password---->:') if name=='loky'and pwd == '123': res=func(*args,**kwargs) return res else: print('账号或密码错误!') return wrapper @outter def index(): print('你好!') index()
Python入门之无参装饰器
最新推荐文章于 2024-03-18 20:03:10 发布