算是py语言的个特性功能吧. 其他js还没接触到有没有这个功能
py装饰器
主要亮点: 在不修改现有函数的功能要求下,丰富现有函数功能.
背景:
- 底层函数已经写好
- 上层接口开发组调用底层函数
- 上层开发人员希望底层多输出一句话
底层函数
- 特别多
- 要求给每个函数增加多输出一句话
- 而且这个需求不稳定,后期可能删
- 如果一个个改动函数,工作量大,不容易维护
def f1():
print("f1 func")
def f2():
print("f2 func")
def f3():
print("f3 func")
def f4():
print("f4 func")
def f5():
print("f5 func")
...
特别多
通过装饰器来改
- 实现了功能,但不知道原理
#!/usr/bin/env python
# coding=utf-8
def outer(func):
def inner():
print("hello")
print("hello")
r= func()
print("end....")
return r
return inner
@outer
def f1():
print("f1 fun")
f1()
print("-"*40)
@outer
def f2():
print("f2 fun")
f2()
前期想办法解决
def printhello():
print("hell world")
def f1():
printhello()
print("f1 func")
...
使用装饰器
@outer
- 1,执行outer函数,并且将其下面的函数名,当作参数f1(outer)
- 2,将outer的返回值重新给f1=outer的返回值
- 新f1函数=inner
#!/usr/bin/env python
# coding=utf-8
def outer(func):
# func = 原来的f1函数
# return lambda: 123
def inner():
print("hello")
print("hello")
r= func() # 执行原f1
print("end....")
return r # 还是原f1的返回值
return inner
@outer
def f1():
print("f1 fun")
f1()
print("-"*40)
@outer
def f2():
print("f2 fun")
f2()