day14

装饰器
1、什么是装饰器
    器指的是工具/功能
    装饰指的是为被装饰对象添加额外的功能
   装饰器就是一个函数,用来为其他函数添加额外的功能
  
 2、为何要用装饰器
    程序的开发需要遵循一个原则:开放封闭原则
        开放:指的是对拓展功能开放
        封闭:指的是对修改源代码封闭
     装饰器就是在不修改被装饰对象源代码以及调用方式的前提为被装饰对象添加上新功能
3.如何用装饰器(装饰器推导)
  初始函数(func:过3秒,打印参数值)(name:过2秒打印姓名)
  import time
  def func(x,y):
  	time.sleep(3)
  	print('===>',x,y)
  func(1,2)
  def name(x)
  	time.sleep(2)
  	print('==>',x)
  name('egon')
  要求:计算函数运行的时间
  方法1:
  def func(x, y):
	time.sleep(3)
	print('===>', x, y)

start_time = time.time()
func(1, 2)
end_time = time.time()
print(end_time-start_time)
单个最简单的操作,但是遇到多个函数计算时间只能一个个修改,工作量太大
方法2:
import time
def func(x, y):
	time.sleep(3)
	print('===>', x, y)
def outer(x):
	def inner(*args,**kwargs):
		start_time = time.time()
		x(*args,**kwargs)
		end_time = time.time()
		print(end_time-start_time)
	return inner
func = outer(func)#inner,且x=func
func(1,2,3,4)
将计算时间的功能写成一个函数,原函数在此函数内调用即可,做成闭包函数,原函数名就是参数,最后将func=outer(func)这里的func和第一行的func函数名是2个不同的东西,这里的func实际等于inner,为了使最后调用与原来一致故写成这样的
注意点:有些函数有return值,之前的装饰器没有写,这样会导致打印返回值时出现不同,故添加操作res = func(),return res,这样返回值就和原函数相同
语法糖:@outer 相当于在结尾写上 原函数名=装饰器名(原函数名)
推导出装饰器模板:
def outer(func):
	def inner(*args,**kwargs):
		res = func(*args,**kwargs)
		return res
	return inner
装饰器最完整的模板
from functools import wraps
def outer(func):
	@wraps(func)
	def inner(*args,**kwargs):
		res = func(*args,**kwargs)
		return res
	return inner




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值