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读取注册表中值的方法
Apr 08 Python
Python 异常处理实例详解
Mar 12 Python
python ChainMap的使用和说明详解
Jun 11 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
python实现代码统计程序
Sep 19 Python
python 生成器和迭代器的原理解析
Oct 12 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
Python 合并拼接字符串的方法
Jul 28 Python
Python3如何在服务器打印资产信息
Aug 27 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
详解Python生成器和基于生成器的协程
Jun 03 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
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python爬虫实现中英翻译词典
2019/06/25 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
证婚人经典证婚词
2014/01/09 职场文书
二年级小学生评语
2014/04/21 职场文书
应届毕业生求职信
2014/05/26 职场文书
班级标语大全
2014/06/21 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python