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对文件操作知识汇总
May 15 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
解决python报错MemoryError的问题
Jun 26 Python
Python实现二维曲线拟合的方法
Dec 29 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
Python多进程编程常用方法解析
Mar 26 Python
Python函数的迭代器与生成器的示例代码
Jun 18 Python
python matplotlib库的基本使用
Sep 23 Python
Python数据分析之pandas读取数据
Jun 02 Python
Python常遇到的错误和异常
Nov 02 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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中去掉字符串首尾空格的方法
2012/05/19 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
php模板引擎技术简单实现
2016/03/15 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
django url到views参数传递的实例
2019/07/19 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
网站客服岗位职责
2014/04/05 职场文书
初一学生期末评语
2014/04/24 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
企业消防安全责任书
2014/07/23 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
2014年保管员工作总结
2014/11/18 职场文书
商务英语求职信范文
2015/03/19 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书