装饰器@小结

廖雪峰老师的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教程学习:装饰器@小结相关推荐

  1. Python 3 学习(一)—— 基础:廖雪峰 Python 教程学习笔记

    文章目录 Python教程 值类型和引用类型 列表和字典的基本操作 列表 元组 字典 Set 函数 内置函数 定义函数 空函数 参数检查 定义默认参数要牢记一点:默认参数必须指向不变对象! Pytho ...

  2. 廖雪峰python教程学习:类、实例与数据封装小结

    类.实例与数据封装小结 廖雪峰老师的python教程 1.类与实例 面向对象最重要的内容就是类(class),类是抽象的模板,后面紧接着是类名,紧接着是(object),表示其是从哪个类上继承上来的, ...

  3. 廖雪峰python教程学习之习题解析

    第一天 条件判断练习测试 # 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: # 低于18.5:过轻 # 18.5-25:正常 ...

  4. 廖雪峰Python教程-笔记

    廖雪峰Python教程 学习范围: Python基础 函数 高级特性 函数性编程 模块 面向对象编程 错误,调试和测试 IO编程 笔记: Python的整数没有大小限制 Python 3的字符串使用U ...

  5. 廖雪峰python教程视频-为什么看不懂廖雪峰的Python学习教程?

    廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...

  6. 廖雪峰python教程完整版-为什么看不懂廖雪峰的Python学习教程?

    廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...

  7. 廖雪峰Python教程 实战day05

    廖雪峰Python教程 实战day05 1. Web程序工作流程 本文部分文字内容.图片摘自<Flask Web开发实战:入门.进阶与原理解析>,作者李辉. 在编写自己的Web框架之前,首 ...

  8. 廖雪峰python教程在哪看_:廖雪峰python教程在哪

    标签,你可以自己查看网页源代码. 廖雪峰的python教程有一点地方没看明白,求指导 题主贴了函数,似乎是一样的,就分析这一个版本:def add_end(L=None): if L is None: ...

  9. 廖雪峰python教程笔记:装饰器

    这是看廖老师python教程的第一个的笔记,因为这是这份教程最难的章节之一,我来来回回看了三遍,终于有所突破,写在这里是为了巩固自己的理解,同时也是希望有错的地方能够得到指正.具体内容见廖雪峰老师的课 ...

最新文章

  1. HTML的标签描述17
  2. FauxPas试用时间破解
  3. ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
  4. zabbix java api
  5. sequelize 左连接 left join_SparkSQL连接查询中的谓词下推处理(下)
  6. BZOJ_2179_FFT快速傅立叶_(FFT)
  7. asp.net 母版页使用方法
  8. ant design pro(二)布局
  9. 专为Oracle数据库恢复而生 - PRM
  10. 有关java.lang.ClassNotFoundException报错的总结
  11. build lavas 失败_vue lavas的项目在IE下显示空白
  12. [转载]关于wm系统同步时ActiveSync出现85010014错误号的解决办法
  13. 【生活中的逻辑谬误】止于分析和简化主义
  14. CSV文件使用Excel打开
  15. Datawhale组队学习周报(第043周)
  16. PySpark机器学习 ML
  17. 三菱FX系列PLC编程口通讯协议详解
  18. CITA环境搭建与运行
  19. excel表格中单元格里面有个斜杠怎么写字?
  20. 基于正交对立学习的改进麻雀搜索算法-附代码

热门文章

  1. js实现时间戳转换成日期
  2. STC89C52单片机DS1302介绍以及代码示例
  3. 关于eclipse和sts的选择
  4. 中央处理器的体系架构可以分为:冯·诺依曼结构和哈佛结构
  5. 面对英语面试,你慌了吗?〔教你几招〕
  6. java 按钮居中_JAVA按钮 怎么居中。
  7. 群发邮箱是什么怎么注册群发邮箱啊?去哪里找?
  8. C++技术:GetAsyncKeyState 与 GetKeyboardState 函数
  9. gitignore 忽略特定文件
  10. 如何根据参考文献查找原文及详细的文献信息