python 装饰器的使用--逐步添加中
2017-11-29 本文已影响10人
LuckTime
装饰器是什么:
装饰器的通用:
带参数的装饰器的使用:
装饰器的使用范围:
入门之前,先提几个问题,然后依次回答这些问题。
答:
装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,
装饰器的返回值也是一个函数/类对象。
它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。
有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。
概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,从而使代码符合开放封闭原则。
装饰器有两种类型,一种装饰器带参数的,一种装饰器不带参数的。
装饰器带的应用场景:
装饰器主要可以用在缓存、日志、URL路由和权限校验等常见的功能
python中装饰器的应用场景使用demo
# _*_ coding:utf-8 _*_
# intend:简单装饰器的功能
# time:2017年11月28日10:20:28
# author:lucktime
## 通用装饰器
def PrintData(func):
def inner(*argvs,**kwargcs):
print('printData ')
x = func(*argvs,**kwargcs)
return x
return inner
## 带参数的装饰器
def Argv_Fun(argv):
def PrintData(func):
def inner(*argvs,**kwargcs):
print('printData Argv_Fun')
print(argv)
x = func(*argvs,**kwargcs)
return x
return inner
return PrintData
'''
test()
打印结果:
printData
printData Argv_Fun
hello Jack
==============print test
'''
@PrintData
@Argv_Fun('hello Jack')
def test():
print('==============print test')
'''
test1(3)
打印结果:
printData Argv_Fun
hello Jack
printData
==============print test1 value 3
'''
@Argv_Fun('hello Jack')
@PrintData
def test1(a):
print('==============print test1 value %d'%a)
'''
print(test2())
打印结果:
printData
printData Argv_Fun
hello Jack
==============print test2
test2
'''
@PrintData
@Argv_Fun('hello Jack')
def test2():
print('==============print test2')
return "test2"
'''
print(test4(2,5))
printData
printData Argv_Fun
hello Jack
==============print test4 2 + 5 = 7
7
'''
@PrintData
@Argv_Fun('hello Jack')
def test4(a,b):
print('==============print test4 %d + %d = %d'%(a,b,(a+b)))
return a+b
test()
test1(3)
print(test2())
print(test4(2,5))