问题:route中的装饰器为什么感觉和平时使用的不太一样,装饰器带参数和不太参数有什么区别?被修饰的函数带参数和不带参数有什么区别?
测试1:装饰器不带参数,被修饰的函数也不带参数。
此时输出为:
如果执行cal()那么将会使用use_log函数,返回的是wrapper()
如果执行cal()的返回值,那么将执行cal()函数体的内容
结果为:
测试2:如果装饰器带参数,被修饰的函数不带参数
这个时候调用cal()那么将会执行wrapper()的函数体+cal()的函数体。
测试3:如果装饰器不带参数,被修饰的函数带参数
测试4:如果装饰器带参数,被修饰的函数也带参数。最复杂的情况。
经过上面的分析之后,再看flask中使用的是哪种情况:
样例代码:
@ app.route(’/’)的代码如下:
可以看到装饰器的参数为‘/’,被修饰的函数为:hello(),所以这里属于第二种情况,即使不调用hello()函数,decorator的函数体也是被执行的,也就是说,只要使用装饰器添加了路由规则,那么就会被加入到map中形成映射关系。
领取专属 10元无门槛券
私享最新 技术干货