python装饰器
python装饰器
装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以再函数执行前和执行后添加相应操作。
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽出大量汉中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
使用装饰器的作用,再不改变原函数的情况下,使原函数可以再开始或结束的时候做点其他操作。
只要函数应用装饰器,那么函数就被重新定义,重新定义为:装饰器的内层函数。
装饰器分析(一)
outer 就是一个装饰器,只要再f1函数上写一个@outer那么每次执行f1函数的时候都会先打印“Hello Welcome to XXX System”再打印“Hello Welcome to XXX System”
def outer(func):
#func 为原来的f1函数
def inner():
print("欢迎来到装饰器内容,在f1函数执行前执行")
r=func()
print("在f1函数执行后执行")
return r
return inner
@outer
def f1():
print("登录f1")
#1.函数执行时从上往下执行,当函数执行到@outer时,就会去执行outer函数,并将其下面的函数名,
#当作参数,此时的f1就传到了func
#2.将outer的返回值重新赋值给f1,此时f1 = outer的返回值
#新f1函数=inner函数
f1()
装饰器分析(二)
如果一个公司有运维部,开发部,测试部,设计部等,并且公司具有基础平台架构,为公司各个部门提供数据库调用,资料查看,监控等。当这些部门想使用这些功能的时候,直接调用这些功能的接口就可以,如下:
#-------------通用装饰器写法----------------------
def outer(func):
def inner(*args,**kwargs):
print("123")
ret = func(*args,*kwargs)
print('456')
return ret
return inner
@outer
def index(a1,a2):
print("复杂内容")
return a1 + a2
index(15,5)
@outer
def f1(arg):
print("F1")
f1(1)
@outer
def f2(a1,a2,a3):
print("三个参数")
f2(1,2,3)