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自动化测试工具Splinter简介和使用实例
May 13 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
使用python判断你是青少年还是老年人
Nov 29 Python
python实现淘宝购物系统
Oct 25 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python中base64与xml取值结合问题
Dec 22 Python
Python语言异常处理测试过程解析
Jan 08 Python
Python实现天气查询软件
Jun 07 Python
Python简易开发之制作计算器
Apr 28 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
php文件包含的几种方式总结
2019/09/19 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
python字符串的方法与操作大全
2018/01/30 Python
python3 读写文件换行符的方法
2018/04/09 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
如何提高python 中for循环的效率
2020/04/15 Python
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
阅兵口号
2014/06/19 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
小学生差生评语
2014/12/29 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
党员转正申请报告
2015/05/15 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
运动会宣传稿50字
2015/07/23 职场文书