2014-05-09 77 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()但忽略返回的結果。