自定义的Redprint或者Flask的 Blueprint 实现的 route 装饰器,为什么没有在外围函数route接收被装饰的函数而在里面的装饰函数 decorator(f) 接收呢?
如:
一:
1、这是自定义redprint的route装饰器实现思路:
def route(self, rule, **options):
def decorator(f):
self.mound.append((f, rule, options))
return f
return decorator
2、这是blueprint的route装饰器实现思路:
def route(self, rule, **options):
"""Like :meth:`Flask.route` but for a blueprint. The endpoint for the
:func:`url_for` function is prefixed with the name of the blueprint.
"""
def decorator(f):
endpoint = options.pop("endpoint", f.__name__)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator
二、这是入门进阶课程装饰器基础学习的关于装饰器的实现思路:
def outer(f):
def decorator(*args,**kw):
print(time.time())
f(*args,**kw)
return decorator
@outer
def f1(x,y,**kw):
print('this is f1 function')
有疑问的地方是一和二两种实现思路的区别是:对于接收被装饰的函数前者是 def decorator(f) 后者是 outer(f)
这是什么思路或意思呢?
作为小白很是疑惑,谢谢老师指导!