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中请使用isinstance()判断变量类型
Aug 25 Python
python获取mp3文件信息的方法
Jun 15 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python程序 创建多线程过程详解
Sep 23 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
django为Form生成的label标签添加class方式
May 20 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
Python中zipfile压缩包模块的使用
May 14 Python
Pygame Event事件模块的详细示例
Nov 17 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
php生成唯一数字id的方法汇总
2015/11/18 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
Laravel find in set排序实例
2019/10/09 PHP
js CSS操作方法集合
2008/10/31 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
JS实现self的resend
2010/07/22 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
医药个人求职信范文
2014/01/29 职场文书
校长先进事迹材料
2014/02/01 职场文书
纠纷协议书
2014/04/16 职场文书
铣工实训报告
2014/11/05 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
redis中lua脚本使用教程
2021/11/01 Redis