Python装饰器

1.类作为装饰器

class TimeDecorator(object):
	def __init__(self, f):
		self.f = f
	def __call__(self, *args):
		start_time = time.time()
		result = self.f(*args)
		end_time = time.time()
		print('Time elapsed for {}'.format(end_time - start_time))
		return result

2.函数作为装饰器

def TimeDecorator(f):
	def wrap_func(*args):
		start_time = time.time()
		result = f(*args)
		end_time = time.time()
		print('Time elapsed for {}'.format(end_time - start_time))
		return result
	return wrap_func

3.闭包
概念解释:一个函数定义在另一个函数作用域内,并且引用了外层函数的变量,则该函数称为闭包。
为了避免使用装饰函数后,原函数的__name__和__doc__属性变成wrap_func()函数的__name和__doc__的情况出现,python在functools包中提供了wraps()。

from functools import wraps 
def TimeDecorator(f):
	@wraps(f)
	def wrap_func(*args):
		start_time = time.time()
		result = f(*args)
		end_time = time.time()
		print('Time elapsed for {}'.format(end_time - start_time))
		return result
	return wrap_func

4.带参数的装饰器

app = FlaskBrother()
@app.route('/')
def HelloWorld():
	return 'hello decorator'
class FlaskBother():
    def __init__(self):
        self.routes = {}
    def route(self,route_str):
        def decorator(func):
        	def wrapper(*args, **kwargs):
        		return func(args, kwargs)
        	return wrapper
        return decorator
    
    def server(self,path):
        view_function = self.routes.get(path)
        if view_function:
            return view_function()
        else:
             raise ValueError('Route "{}" has not been registered'.format(path))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值