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列表去重的二种方法
Feb 14 Python
Python操作列表之List.insert()方法的使用
May 20 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
python opencv实现图像边缘检测
Apr 29 Python
Django models.py应用实现过程详解
Jul 29 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
PyTorch中的拷贝与就地操作详解
Dec 09 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文件中是否含有bom的函数
2012/05/31 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
原生js实现trigger方法示例代码
2019/05/22 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python实现合并字典的方法
2015/07/07 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
Python控制Firefox方法总结
2019/06/03 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
C语言编程练习
2012/04/02 面试题
活动策划求职信模板
2014/04/21 职场文书
大学班级文化建设方案
2014/05/06 职场文书
个人安全生产承诺书
2014/05/22 职场文书
校园安全标语
2014/06/07 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
银行先进个人总结
2015/02/15 职场文书
城管年度个人总结
2015/02/28 职场文书
2015学校年度工作总结
2015/05/11 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL