廖雪峰python教程学习:装饰器@小结
装饰器@小结
廖雪峰老师的python教程
在代码运行期间动态增加功能的方式,称为装饰器
本质上,装饰器是一个可以返回函数的高阶函数
最基本的可以定义如下:
def log(func):@functools.wraps(func)def wrapper(*args, **kw):print('call %s():' % func.__name__) #func.__name__可以显示函数名称return func(*args, **kw)return wrapper
使用装饰器,需要了解@语法
@log
def now():print('2015-3-25')
now()
#call now():
#2015-3-25
@语法的规则是,遇到@修饰的函数,会先执行下一行的函数,将其作为@行语句函数的参数,最后返回给下一行函数。
例如在本段语句中
@log 等效于 now = log(now)
所以会先将now函数作为参数传入log函数中,执行log函数print参数的函数名称的任务后,再执行now函数本身的内容。
如果要让@语句执行的函数自带参数,则需要让装饰器具有三层函数,如:
import functoolsdef log(text):def decorator(func):@functools.wraps(func)#功效等效于 wrapper.__name__ = func.__name__def wrapper(*args, **kw):print('%s %s():' % (text, func.__name__))return func(*args, **kw)return wrapperreturn decorator@log('execute')
def now():print('2015-3-25')#execute now():
#2015-3-25
此时,@log(‘execute’) 等效于 now = log(‘execute’)(now)
首先会执行log函数,参数是’execute’,返回decorator
第二部就会调用decorator函数,此时的参数变成了now(),返回的最终值会变为 wrapper函数,为了防止函数被更改,我们就需要使用@functools.wraps(func)这一步,防止这个过程。
廖雪峰python教程学习:装饰器@小结相关推荐
- Python 3 学习(一)—— 基础:廖雪峰 Python 教程学习笔记
文章目录 Python教程 值类型和引用类型 列表和字典的基本操作 列表 元组 字典 Set 函数 内置函数 定义函数 空函数 参数检查 定义默认参数要牢记一点:默认参数必须指向不变对象! Pytho ...
- 廖雪峰python教程学习:类、实例与数据封装小结
类.实例与数据封装小结 廖雪峰老师的python教程 1.类与实例 面向对象最重要的内容就是类(class),类是抽象的模板,后面紧接着是类名,紧接着是(object),表示其是从哪个类上继承上来的, ...
- 廖雪峰python教程学习之习题解析
第一天 条件判断练习测试 # 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: # 低于18.5:过轻 # 18.5-25:正常 ...
- 廖雪峰Python教程-笔记
廖雪峰Python教程 学习范围: Python基础 函数 高级特性 函数性编程 模块 面向对象编程 错误,调试和测试 IO编程 笔记: Python的整数没有大小限制 Python 3的字符串使用U ...
- 廖雪峰python教程视频-为什么看不懂廖雪峰的Python学习教程?
廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...
- 廖雪峰python教程完整版-为什么看不懂廖雪峰的Python学习教程?
廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...
- 廖雪峰Python教程 实战day05
廖雪峰Python教程 实战day05 1. Web程序工作流程 本文部分文字内容.图片摘自<Flask Web开发实战:入门.进阶与原理解析>,作者李辉. 在编写自己的Web框架之前,首 ...
- 廖雪峰python教程在哪看_:廖雪峰python教程在哪
标签,你可以自己查看网页源代码. 廖雪峰的python教程有一点地方没看明白,求指导 题主贴了函数,似乎是一样的,就分析这一个版本:def add_end(L=None): if L is None: ...
- 廖雪峰python教程笔记:装饰器
这是看廖老师python教程的第一个的笔记,因为这是这份教程最难的章节之一,我来来回回看了三遍,终于有所突破,写在这里是为了巩固自己的理解,同时也是希望有错的地方能够得到指正.具体内容见廖雪峰老师的课 ...
最新文章
- HTML的标签描述17
- FauxPas试用时间破解
- ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
- zabbix java api
- sequelize 左连接 left join_SparkSQL连接查询中的谓词下推处理(下)
- BZOJ_2179_FFT快速傅立叶_(FFT)
- asp.net 母版页使用方法
- ant design pro(二)布局
- 专为Oracle数据库恢复而生 - PRM
- 有关java.lang.ClassNotFoundException报错的总结
- build lavas 失败_vue lavas的项目在IE下显示空白
- [转载]关于wm系统同步时ActiveSync出现85010014错误号的解决办法
- 【生活中的逻辑谬误】止于分析和简化主义
- CSV文件使用Excel打开
- Datawhale组队学习周报(第043周)
- PySpark机器学习 ML
- 三菱FX系列PLC编程口通讯协议详解
- CITA环境搭建与运行
- excel表格中单元格里面有个斜杠怎么写字?
- 基于正交对立学习的改进麻雀搜索算法-附代码