请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

自定义的Redprint 实现的 route 装饰器,为什么没有在外围函数route接受被装饰的函数而在里面的装饰函数 decorator(f) 接收呢?

自定义的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)
这是什么思路或意思呢?
作为小白很是疑惑,谢谢老师指导!

正在回答 回答被采纳积分+3

2回答

7七月 2019-11-08 16:42:53

这是因为入门基础课里的是纯函数,而另外的一个是写在类里面的方法吧?

0 回复 有任何疑惑可以回复我~
  • 提问者 背包独行客 #1
    def route(self, rule, **options) 这个确实是写在类的方法
    def outer(f) 定义的是纯函数
    这是两者不同实现手法的根本原因吗?
    如果确实是这样,作为初学者,也就又有一个新的积累,谢谢!
    回复 有任何疑惑可以回复我~ 2019-11-09 13:54:08
  • 7七月 回复 提问者 背包独行客 #2
    是的,一个是类一个是 纯函数,本质上其实是一样的。
    回复 有任何疑惑可以回复我~ 2019-11-12 07:03:33
7七月 2019-11-08 04:20:01

代码格式化一下,然后 详细描述下,这代码真没法看。

0 回复 有任何疑惑可以回复我~
  • 提问者 背包独行客 #1
    已重新编辑 描述,请赐教 谢谢!
    回复 有任何疑惑可以回复我~ 2019-11-08 08:58:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信