David_zhou1 2015-08-31 03:10 采纳率: 0%
浏览 1635

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\npassword: %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 后面呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料