关于装饰器的问题

来源:2-6 实现Redprint

非洲小白脸4

2019-07-07

	// 这是自定义类 Redprint 红图 里面的方法 供视图函数绑定url
    def route(self, rule, **options):
        def decorator(f):
            print('f_name: ' + f.__name__)
            print('f_type' + str(type(f)))
            self.mound.append((f, rule, options))
            return f

        return decorator

decorator方法的 参数 f 通过打印显示 是被修饰的视图函数 但是 这函数不应该是从 route 里面传过来的吗

老师以前的python 基础课程 里面详解的装饰器 都是被装饰的函数 被装饰器函数包裹返回了一个高阶函数 但是 被传入的参数被修饰的函数好像都是从最外层方法 上面的 route 函数传参给 被包裹的 decorate 函数的

为什么 decorator 可以直接越过 route 拿到 f 即被修饰的 函数

求老师 或者其他同学帮忙解惑一下 谢谢了

写回答

1回答

慕粉916768

2019-07-07

带参数的装饰器和不带参数的装饰器运行有稍微的不同。

一个简单的例子:

@timer('para1')
def task():
    pass

那么执行过程就是先执行带参数的timer(),生成一个新的函数,然后将task()作为参数传入这个新的函数中,简单写就是:

timer=timer('para1')
timer(task)




0
0

Python Flask高级编程之RESTFul API前后端分离精讲

RESTFul+权限管理+token令牌+扩展flask=提升编程思维

2037 学习 · 359 问题

查看课程