1.装饰器的作用
在 不修改被装饰对象的源代码;不修改被装饰对象的调用方式; 为被封装的对象添加新的功能。
例如下列:
test函数为事先封装好的一个功能,但是在后期迭代的过程中,希望能为该功能增加一个计算运行时间的功能。这时候,装饰器就起到了作用了。
def test(s): print(‘%s is testing‘%s) time.sleep(3)
def timer(func): def wrapper(*args, **kwargs): start = time.time() res = func(*args, **kwargs) end = time.time() print(start - end) return res return wrapper test= timer(test) ###新的函数test中含有打印运行时间的功能,单完全没有改变之前函数的源代码,以及调用方式 test(‘dd‘)
下面是装饰器的真正使用方法 : @wrapper
import time def timer(func): def wrapper(*args, **kwargs): start = time.time() res = func(*args, **kwargs) end = time.time() print(start - end) return res return wrapper @timer ##引用装饰器 def test(s): print(‘%s is testing‘%s) time.sleep(3) test(‘tina‘)
无参装饰器
import time def timer(func): def wrapper(*args, **kwargs): start = time.time() res = func(*args, **kwargs) end = time.time() print(start - end) return res return wrapper @timer def test(s): print(‘%s is testing‘%s) time.sleep(3) test(‘tina‘)
有参装饰器
def data_from(file): def data_form(func): def wrapper(*args, **kwargs): if file == ‘txt‘: print(‘data from txt‘) res = func(*args, **kwargs) return res if file == ‘sql‘: print(‘data from sql‘) if file == ‘mongodb‘: print(‘data from mongodb‘) return wrapper return data_form @data_from(‘sql‘) def tell_name(name): print(‘my name is %s‘ %name) tell_name(‘tt‘)
原文地址:https://www.cnblogs.com/tina053/p/10331260.html
时间: 2024-10-16 17:20:25