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操作json数据的一个简单例子
Apr 17 Python
Python实现测试磁盘性能的方法
Mar 12 Python
Python中常见的数据类型小结
Aug 29 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python实现Youku视频批量下载功能
Mar 14 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
python求质数列表的例子
Nov 24 Python
windows下python安装pip方法详解
Feb 10 Python
django API 中接口的互相调用实例
Apr 01 Python
Python实现微信表情包炸群功能
Jan 28 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
Jquery ui css framework
2010/06/28 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python 图片验证码代码
2008/12/07 Python
Python进程间通信用法实例
2015/06/04 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
深入解析神经网络从原理到实现
2019/07/26 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
python能做哪方面的工作
2020/06/15 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
日期和时间问题
2015/01/04 面试题
学校岗位设置方案
2014/01/16 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技