玩蛇网提供最新Python编程技术信息以及Python资源下载!

求助关于python装饰器返回值语法问题

为什么代码中得activate函数里面的wrapped函数中的try语句里面要return func呢

因为一个被装饰的函数通常被期望与没有被装饰的时候返回一样的东西。那里返回的就是未被装饰的函数的调用结果。至于 try,因为那个装饰器要做清理。finally 中的语句总是会执行的,不管是发生异常,还是你说要返回了。

Python中装饰器类似面向切面编程(AOP)中的Around advice(详细可以参考:http://docs.spring.io/spring/docs/2.0.8/reference/aop.html
你上面这段代码在调用run函数的时候其实是调用了activate函数返回的wrapped函数,然后wrapped函数中的func变量是在test_simple中定义的run函数。也就是说如果你在activate函数中不写“return func()”的话,那么根本不会调用test_simple中定义的run函数。
如果上面的代码翻译成JavaScript的话大意会是如下:

var run = activate(function(){
    // run函数中的代码
})
function activate(func) {
    return function() {
        // wrapped中的代码
        return func();        
    }
}

也就是说你在test_simple中调用的run函数其实已经是一个被替换掉的另外一个函数,这个替换的函数就是activate函数中返回的函数。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19980.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月22日 - 08时34分24秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules