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互转操作实例
Jan 19 Python
python判断字符串是否包含子字符串的方法
Mar 24 Python
Python中生成器和yield语句的用法详解
Apr 17 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
Python编写电话薄实现增删改查功能
May 07 Python
Python用threading实现多线程详解
Feb 03 Python
python 输出所有大小写字母的方法
Jan 02 Python
简单了解python的一些位运算技巧
Jul 13 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
如何使用php输出时间格式
2013/08/31 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
python str与repr的区别
2013/03/23 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
某公司C#程序员面试题笔试题
2014/05/26 面试题
《小小雨点》教学反思
2014/02/18 职场文书
大学生活自我评价
2014/04/09 职场文书
中学生励志演讲稿
2014/04/26 职场文书
授权委托书格式范文
2014/08/02 职场文书
大学军训通讯稿
2015/07/18 职场文书
值班管理制度范本
2015/08/06 职场文书
争做文明公民倡议书
2019/06/24 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server