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使用chardet判断字符编码
May 09 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python中正则表达式详解
May 17 Python
Django 前后台的数据传递的方法
Aug 08 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
python中列表和元组的区别
Dec 18 Python
python使用itchat实现手机控制电脑
Feb 22 Python
TensorFlow实现Batch Normalization
Mar 08 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
Python如何使用字符打印照片
Jan 03 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
Python实现归一化算法详情
Mar 18 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脚本[带参数]的方法
2010/01/22 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python友情链接检查方法
2015/07/08 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python查询mysql,返回json的实例
2018/03/26 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Python pip配置国内源的方法
2020/02/14 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
爱心捐款倡议书
2014/04/14 职场文书
综合实践活动总结
2014/05/05 职场文书
签字仪式主持词
2015/07/03 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA