装饰器
装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。
在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果。
相对于其它方式,装饰器语法简单,代码可读性高。因此,装饰器在Python项目中有广泛的应用。
装饰器的应用场景:饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装
饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。
概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
装饰器的规则:
1 def derector(function): 2 def wrapper(*args,**kwargs): 3 function(*args,**kwargs) 4 return wrapper
装饰器可以用def的形式定义,如上面代码中的decorator。装饰器接收一个可调用对象作为输入参数,并返回一个新的可调用对象。
装饰器新建了一个可调用对象,也就是上面的wrapper。
1.装饰器中如何传递参数?
def outter1(Func): def wrapper(args): print("Before") Func(args) print("After") return wrapper @outter1 def Function1(agrs): print("in the Function1:%s" %agrs) Function1("nihao")
2.要修饰的函数中有返回值如何处理?
1 def outter2(Func): 2 def wrapper(): 3 res = Func() 4 return res 5 return wrapper 6 @outter2 7 def Function2(): 8 print("in the Function2") 9 return "Function2" 10 print(Function2())
3.带有参数的装饰器
1 import time 2 user,passwd = "alex","abc123" 3 def derector(auth_type): 4 print("auth_type:%s" %auth_type) 5 def outwrapper(function): 6 def wrapper(*args,**kwargs): 7 print(*args,**kwargs) 8 if auth_type =="local": 9 username = input("input your username:") 10 password = input("input the password:") 11 if username == user and password == passwd: 12 print('