
今天才发现装饰器的不知另一种用法,下面就先上代码:
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,不知装饰器还是挺有意思的。源码下载