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的lambda匿名函数的简单介绍
Apr 25 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
python实现矩阵乘法的方法
Jun 28 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 Python
如何用python爬取微博热搜数据并保存
Feb 20 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
php数组和链表的区别总结
2019/09/20 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
给Python初学者的一些编程技巧
2015/04/03 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python 变量初始化空列表的例子
2019/11/28 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
露营世界:Camping World
2017/02/02 全球购物
中药专业毕业自荐书范文
2014/02/08 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript