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中wx将图标显示在右下角的脚本代码
Mar 08 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
python版本五子棋的实现代码
Dec 11 Python
浅析python的Lambda表达式
Feb 27 Python
实例详解Python模块decimal
Jun 26 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Python select及selectors模块概念用法详解
Jun 22 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
国内咖啡文化
2021/03/03 咖啡文化
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
python安装requests库的实例代码
2019/06/25 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
python对XML文件的操作实现代码
2020/03/27 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
客户代表自我评价范例
2013/09/24 职场文书
业务经理岗位职责
2013/11/11 职场文书
个人担保书格式范文
2014/05/12 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
英文产品推荐信
2015/03/27 职场文书
2015公司年度工作总结
2015/05/14 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书