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中装饰器的用法
Apr 27 Python
python基于socket实现网络广播的方法
Apr 29 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
python中函数总结之装饰器闭包详解
Jun 12 Python
python如何读写csv数据
Mar 21 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
对python添加模块路径的三种方法总结
Oct 16 Python
Python设计模式之外观模式实例详解
Jan 17 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
Python Django 后台管理之后台模型属性详解
Apr 25 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
有关php运算符的知识大全
2011/11/03 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
jQuery 位置插件
2008/12/25 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
Django实现分页功能
2018/07/02 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
股权收购意向书
2014/04/01 职场文书
股份转让协议书
2014/04/12 职场文书
法人委托书范本
2014/09/15 职场文书
护士自荐信范文
2015/03/25 职场文书
2015年化验员工作总结
2015/04/10 职场文书
春节晚会开场白
2015/05/29 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
Python机器学习三大件之一numpy
2021/05/10 Python
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript