你可能不知道的Python装饰器

开发 后端
你可能不知道的Python装饰器, 今天才发现装饰器的另一种用法,下面就先上代码。

 [[283551]]

今天才发现装饰器的另一种用法,下面就先上代码:

 

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) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

代码很简单就是,定义三个foo开头的函数,每个foo函数输出不一样的数字,都通过装饰器data_item进行修饰,最后通过max_item函数,执行一系列逻辑获取结果。

这里有个容易被忽略的点,那就是装饰器实际是在执行 max_item()之前就执行了。

所以,如果你打印下data_list你会发现它是有值的。

 

[<function foo at 0x10bb05ea0>, <function foo1 at 0x10bb05d90>, <function foo3 at 0x10bb05f28>] 
  • 1.

即列表里面已经有三个被装饰器修饰的函数了,然后在

 

max(i() for i in data_list) 
  • 1.

的i()阶段这三个函数执行了,得到了结果(1,2,3),然后最后取它们的max值即3。

什么场景会用到呢,一般对于传入一个值然后多种处理方案,选择其中优秀方案的时候可以考虑使用这种方法。

emmm,装饰器还是挺有意思的。

责任编辑:华轩 来源: Python学习开发
相关推荐

2020-01-29 19:40:36

Python美好,一直在身边Line

2021-01-05 11:22:58

Python字符串代码

2012-11-23 10:57:44

Shell

2019-11-20 10:25:06

sudoLinux

2015-08-13 09:03:14

调试技巧

2023-02-27 09:20:24

绝对定位CSS

2023-01-29 09:46:47

Dialog弹窗模态

2014-12-08 10:39:15

2021-07-12 07:59:06

安全 HTML 属性

2015-09-16 10:48:57

Python

2021-12-17 00:10:00

ChromeDevtools功能

2018-05-10 11:50:13

Docker容器冷知识

2020-03-05 11:10:18

Left join数据库MySQL

2010-08-06 13:15:35

2020-05-09 08:48:21

JavaScript原生方法代码

2010-07-26 13:24:11

2011-02-14 16:11:44

2010-07-21 12:37:11

Linux用户

2010-08-10 09:13:49

Linux用户

2015-05-14 15:59:33

DockerLinux容器管理工具
点赞
收藏

51CTO技术栈公众号