我一直在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
。它是否正确?如果没有,我在这里做错了什么?
答案 0 :(得分:5)
您忘记在包装中返回func()
的结果:
def logme(func):
def wrapped(*args):
for arg in args: print str(arg)
return func(*args)
return wrapped
否则wrapped()
调用func()
但忽略返回的结果。