2014-05-09 51 views
3

我一直在尝试在Python 2.7装饰,并试图安装在闲置:Python的装饰没有返回值

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

'wrapped'中没有return语句。 –

+0

非常感谢@larsmans – jaysonpryde

回答

4

你忘了你的包装返回func()结果:

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

否则wrapped()电话func()但忽略返回的结果。