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 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
Python基础之函数用法实例详解
Sep 10 Python
python取代netcat过程分析
Feb 10 Python
python使用RNN实现文本分类
May 24 Python
通过python顺序修改文件名字的方法
Jul 11 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
python实现倒计时小工具
Jul 29 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
Visual Studio Code搭建django项目的方法步骤
Sep 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
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
PHP7 list() 函数修改
2021/03/09 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
Angular实现form自动布局
2016/01/28 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
javascript中的面向对象
2017/03/30 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
微信小程序实现滑动删除效果
2017/05/19 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
js实现导航跟随效果
2018/11/17 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Python多继承顺序实例分析
2018/05/26 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
棉花姑娘教学反思
2014/02/15 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
小学生期末评语
2014/04/21 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
看雷锋电影观后感
2015/06/10 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby