对于装饰器Decorator的理解

news/2024/7/7 23:11:06

装饰器是用来描述函数,记录日志,提供信息的函数,是一个为了更好的服务主函数的副函数:

 详情还需查看:廖雪峰装饰器

关键在于:【import functools是导入functools模块。模块的概念稍候讲解。现在,只需记住在定义wrapper()的前面加上@functools.wraps(func)即可。】

下面是对两道对应练习题的个人代码编写即记录:

练习题1:请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:(事件函数目前没掌握,但是不影响对装饰器的理解)

import time, functools
def metric(fn):         # 这是decorator函数的定义,没有过多要传递的信息,两层嵌套嵌套即可@functools.wraps(fn)def wrapper(*args, **kw):print('%s executed in %s ms' % (fn.__name__, '10.24'))return fn(*args, **kw)return wrapper@metric                 #这是在定义主函数时调用decorator函数的方法
def fast(x, y):time.sleep(0.0012)return x + y@metric
def slow(x, y, z):time.sleep(0.1234)return x * y * zf = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:print('测试失败!')
elif s != 7986:print('测试失败!')

练习题2:请编写一个decorator,能在函数调用的前后打印出'begin call''end call'的日志:

import functools
def metric(text1,text2):   # 这里不允许写要服务的函数名def decorate(fn):      # 要服务的函数名这里写@functools.wraps(fn)def wrapper(*args, **kw):print('%s %s:' % (text1, fn.__name__))fn(*args, **kw)print('%s %s.' % (text2, fn.__name__))return wrapperreturn decorate@ metric('begin call','end call')  # r如果在调用装饰器时要个性化传递参数,装饰器函数需要3层嵌套;注意这里不能再写good,已经@了。
def good(x,y):print(x+y)
good(2,3)

 

转载于:https://www.cnblogs.com/Jie-Bian/p/11047401.html


http://lihuaxi.xjx100.cn/news/250125.html

相关文章

CTO(首席技术官)

CTO(首席技术官)英文Chief Technology Officer,即企业内负责技术的最高负责人。这个名称在1980年代从美国开始时兴。起于做很多研究的大公司,如General Electric,AT&T,ALCOA,主要责任是将科…

×××的简介

及其配置示例 的定义 虚拟专网(-VIRTUAL PRIVATE NETWORK)指的是在公用网络上建立专用网络的技术。之所以称为虚拟网主要是因为整个网络的任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络…

Go处理百万每分钟的请求

2019独角兽企业重金招聘Python工程师标准>>> I have been working in the anti-spam, anti-virus and anti-malware industry for over 15 years at a few different companies, and now I know how complex these systems could end up being due to the massive a…

【编程题】【Scratch二级】2019.12 飞翔的小鸟

飞翔的小鸟 1. 准备工作 (1)导入背景“Blue Sky”; (2)导入角色“Toucan”和“Buildings” 。 2. 功能实现 (1)Toucan角色大小设置为50,坐标为(-200,0),不停扇动翅膀(在2,3两个造型来回切换),Toucan位于最上层,不被其他角色遮挡; (2)按“↑”控制Touc…

model模式详解

一、最简单的设计模式 二、model2设计模式 其中界面层不能去调用dao层,是 界面(servlet)-》业务层(service)-》数据访问层dao(dao层) 而bean层的set和get方法各个层都能调用…

shell 中长命令的换行处理

考察下面的脚本: emcc -o ./dist/test.html --shell-file ./tmp.html --source-map-base dist -O3 -g4 --source-map-base dist -s MODULARIZE1 -s "EXPORT_NAME\"Test\"" -s USE_SDL2 -s LEGACY_GL_EMULATION1 --pre-js ./pre.js --post-js ./…

【编程题】【Scratch二级】2019.12 绘制十个正方形

绘制十个正方形 1. 准备工作 (1)保留小猫; (2)白色背景。 2. 功能实现 (1)小猫初始位置在舞台中心; (2)隐藏角色; (3)多边形的边长为100,线条粗细5,线条颜色为红色; (4)利用“画笔”、“运动”和“控制”模块中的积木画出上面图形。 3. 设计思路与实…

php解析ip列表并入库

前一段时间因为要开发一个新项目,需要一个ip库,由于公司原本无这样一个库,所以急需从文件中匹配ip地址然后存库。下面是我下的一段程序,可能效率不是很高,代码也没有做过多的优化,有些地方比较繁琐&#xf…