python装饰器的特性原理详解


Posted in Python onDecember 25, 2019

这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

今天发现了装饰器的另一种用法,下面就先上代码:

data_list = []
def data_item(func):
  data_list.append(func)
  return func
@data_item
def foo():
  return 1
@data_item
def foo1():
  return 2
@data_item
def foo3():
  return 3
def max_item():
  result = max(i() for i in data_list)
  return result
if __name__ == '__main__':
  item = max_item()
  print(item)

代码很简单就是,定义三个foo开头的函数,每个foo函数输出不一样的数字,都通过装饰器data_item进行修饰,最后通过max_item函数,执行一系列逻辑获取结果。

这里有个容易被忽略的点,那就是装饰器实际是在执行 max_item()之前就执行了。
所以,如果你打印下data_list你会发现它是有值的。

[<function foo at 0x10bb05ea0>, <function foo1 at 0x10bb05d90>, <function foo3 at 0x10bb05f28>]

即列表里面已经有三个被装饰器修饰的函数了,然后在

max(i() for i in data_list)

的i()阶段这三个函数执行了,得到了结果(1,2,3),然后最后取它们的max值即3。

什么场景会用到呢,一般对于传入一个值然后多种处理方案,选择其中最佳方案的时候可以考虑使用这种方法。
emmm,装饰器还是挺有意思的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python中返回字典键的值的values()方法使用
May 22 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
python将控制台输出保存至文件的方法
Jan 07 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Django MEDIA的配置及用法详解
Jul 25 Python
基于Pytorch SSD模型分析
Feb 18 Python
python绘制封闭多边形教程
Feb 18 Python
Python局部变量与全局变量区别原理解析
Jul 14 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
Python将列表中的元素转化为数字并排序的示例
Dec 25 #Python
python中的subprocess.Popen()使用详解
Dec 25 #Python
python打印n位数“水仙花数”(实例代码)
Dec 25 #Python
python中有关时间日期格式转换问题
Dec 25 #Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 #Python
Python和Sublime整合过程图示
Dec 25 #Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 #Python
You might like
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
浅谈php命令行用法
2015/02/04 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Python实现序列化及csv文件读取
2020/01/19 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
Python ini文件常用操作方法解析
2020/04/26 Python
如何用Python绘制3D柱形图
2020/09/16 Python
浅析python函数式编程
2020/09/26 Python
python批量生成条形码的示例
2020/10/10 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
公司员工的自我评价范例
2013/11/01 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL