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 开发Activex组件方法
Nov 08 Python
python求斐波那契数列示例分享
Feb 14 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Python基于pip实现离线打包过程详解
May 15 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
Django封装交互接口代码
Jul 12 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
python 中关于pycharm选择运行环境的问题
Oct 31 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
pyqt5打包成exe可执行文件的方法
May 14 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防盗链的常用方法小结
2010/07/02 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
python类和函数中使用静态变量的方法
2015/05/09 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
python实现简单名片管理系统
2018/11/30 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
python deque模块简单使用代码实例
2020/03/12 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
求职简历推荐信范文
2013/12/02 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
大学校务公开实施方案
2014/03/31 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
五一口号
2014/06/19 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
python b站视频下载的五种版本
2021/05/27 Python