Python 装饰器备忘
程序员文章站
2022-06-08 20:48:44
```
def deco(attr): ''' 装饰器,共包含三层返回结构 \n 第一层:用于接收 @deco 的参数,此处的代码只在初始化装饰器时执行一次 \n 第二层:用于接收 function,此处的代码只在初始化装饰器时执行一次 \n 第三层:用于接收 function 的参数,并将作为最终... ......
def deco(attr): ''' 装饰器,共包含三层返回结构 \n 第一层:用于接收 @deco 的参数,此处的代码只在初始化装饰器时执行一次 \n 第二层:用于接收 function,此处的代码只在初始化装饰器时执行一次 \n 第三层:用于接收 function 的参数,并将作为最终被执行与返回的装饰结果 \n ''' def _deco(f): '''第二层:用于接收 function,此处的代码只在初始化装饰器时执行一次 ''' print('只在装饰函数时,执行一次,此时装饰函数', f.__name__) def __deco(a, b): '''第三层:用于接收 function 的参数,并将作为最终被执行与返回的装饰结果 ''' print('before run attr: ' + attr + '; a: ' + a + '; b: ' + b) # 此处必须调用 function,不然装饰器执行过后,就不会再执行 function 的函数体 f(a, b) print('after run attr: ' + attr + '; a: ' + a + '; b: ' + b) return __deco return _deco @deco('hello') def hello(a, b): print('hello, ' + a + b) @deco('world') def world(a, b): print('world, ' + a + b) hello('a', 'b') world('A', 'B') # 执行结果: # # 只在装饰函数时,执行一次,此时装饰函数 hello # 只在装饰函数时,执行一次,此时装饰函数 world # before run attr: hello; a: a; b: b # hello, ab # after run attr: hello; a: a; b: b # before run attr: world; a: A; b: B # world, AB # after run attr: world; a: A; b: B
上一篇: css3选择器的属性和特性
下一篇: 【java并发】juc高级锁机制探讨