首页 > 编程语言 > 详细

容易被忽视的python装饰器的特性

时间:2019-11-23 01:15:28      阅读:110      评论:0      收藏:0      [点我收藏+]

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

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装饰器的特性

原文:https://www.cnblogs.com/c-x-a/p/11914918.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!