Python装饰器没有返回值

时间:2014-05-09 16:03:32

标签: python decorator python-decorators

我一直在python 2.7中尝试装饰器并尝试在空闲时进行设置:

def logme(func):
    def wrapped(*args):
        for arg in args: print str(arg)
        func(*args)
    return wrapped

@logme
def my_func(*args):
    res = 1
    for arg in args :
        print "Multiplying %s by %s" % (arg, res)
        res*=arg
    print res
    return res

输出是这样的:

2
3 
Multiplying 2 by 1
Multiplying 3 by 2
6

所以res值是对的。但是,当我尝试通过以下方式存储res值时:

x = my_func(2,3)

x的值为None。它是否正确?如果没有,我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

您忘记在包装中返回func()的结果:

def logme(func):
    def wrapped(*args):
        for arg in args: print str(arg)
        return func(*args)
    return wrapped

否则wrapped()调用func()但忽略返回的结果。