关于装饰器的问题
来源: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)
00
相似问题