不了解是否其他语言也有类似 python 装饰器这样的东西。
#!/usr/bin/env python # coding:utf-8 # 复习一下函数作为参数传递。 # def f11(): # print(12345) # # # def f12(xxx): # xxx() # # # f12(f11) ## 装修器:本质就是函数,功能是为其他函数添加附加功能 # 原则: # 1. 不修改被装饰函数的源代码 # 2. 不修改被修饰函数的调用方式 ## 装饰器 = 高阶函数 + 函数嵌套 + 闭包 def outer(func): def inner(): print('log') ret = func() print('after') return ret return inner @outer def f1(): print('F1') return '砍你哦.' @outer def f2(): print('F2') @outer def f100(): print('F100')
在另一个文件中调用上面定义的函数,看看装饰器是否启作用:
#!/usr/bin/env python # coding:utf-8 import outer01 outer01.f1() outer01.f2() outer01.f100()
装饰器简单原理:
#!/usr/bin/env python # coding:utf-8 def outer(func): def inner(): print('before') func() print('after') return inner ## 格式 @ + 函数名 ## 功能: # 1. 自动执行outer函数并且将其下面的函数名f1当作参数传递。 # 2. 将outer函数的返回值,重新赋值给f1 @outer def f1(): print('F1') # 一旦函数被装饰器装饰,函数就会被重新赋值成装饰器函数的内层函数 f1()
换一个文件调用函数:
#!/usr/bin/env python # coding:utf-8 import outer01 res = outer01.f1() # 也拿到了原函数的返回值。 print(res)