扫码关注官方订阅号
为什么代码中得activate函数里面的wrapped函数中的try语句里面要return func呢
ringa_lee
因为一个被装饰的函数通常被期望与没有被装饰的时候返回一样的东西。那里返回的就是未被装饰的函数的调用结果。至于 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函数中返回的函数。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为一个被装饰的函数通常被期望与没有被装饰的时候返回一样的东西。那里返回的就是未被装饰的函数的调用结果。至于 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的话大意会是如下:
也就是说你在test_simple中调用的run函数其实已经是一个被替换掉的另外一个函数,这个替换的函数就是activate函数中返回的函数。