问题描述
- Python 装饰器的疑问?
-
在学装饰器的时候看到这篇文章,[http://blog.csdn.net/mdl13412/article/details/22608283浅谈python闭包]。感觉很赞。但在最后部分“多个装饰器运行期行为”时糊涂了。
自己用下列程序桌布验证时发现了问题。def tracer(msg): print "[TRACE] %s" % msg def login_debug_helper(show_debug_info=False): tracer("login_debug_helper") def proxy_fun(func): tracer("proxy_fun") print '3' def delegate_fun(username, password): print '5' tracer("delegate_fun") if show_debug_info: print "username: %s password: %s" % (username, password) return func(username, password) print '4' return delegate_fun return proxy_fun print 'Declaring login_a' @login_debug_helper(show_debug_info=True) def login_a(username, password): tracer("login_a") print "do some login authentication" return True print ' @2 Call login_a' login_a("mdl", "pwd")
运行之后,输出的log如下:
Declaring login_a [TRACE] login_debug_helper [TRACE] proxy_fun 3 4 @2 Call login_a 5 [TRACE] delegate_fun username: mdl password: pwd [TRACE] login_a do some login authentication
然后就有问题了。为什么“@2 Call login_a“ 在5之前?
为什么“TRACE] delegate_fun” 不是紧跟在[TRACE] proxy_fun 后面呢?
解决方案
时间: 2024-10-10 18:26:16