python装饰器的特性原理详解

yipeiwu_com5年前Python基础

这篇文章主要介绍了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设计】。

相关文章

浅谈Django自定义模板标签template_tags的用处

浅谈Django自定义模板标签template_tags的用处

自定义模板标签,过滤器。英文翻译是Customtemplatetagsandfilters。customfilter自定义过滤器今天不在我的记录范围之内,以后用到再看官方文档也不迟。 *...

Python使用folium excel绘制point

Python使用folium excel绘制point

使用folium excel 绘制point 制作内容 根据气象台资料获得的点进行绘制 对一个特殊的点做特别的标注 数据来源 #!/usr/bin/env pytho...

Python六大开源框架对比

Python六大开源框架对比

Python 是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Py...

python 函数中的内置函数及用法详解

python 函数中的内置函数及用法详解

今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1、abs() 返回一个数值的绝对值,可以是整数或浮点数...

python3设计模式之简单工厂模式

在Python3环境下,调试实现了《大话设计模式》中简单工厂模式,通过定义单独的工厂类,完成对具体的产品的实例化,参考链接 具体实现见代码: #!/usr/bin/env pytho...