你可能不知道的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装饰器》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/5575.html

(40)
打赏 微信公众号 微信公众号 微信小程序 微信小程序
主编的头像主编认证作者
上一篇 2019年11月25日 下午2:04
下一篇 2019年11月25日 下午3:00

相关推荐

发表回复

登录后才能评论
扫码关注
扫码关注
分享本页
返回顶部