python 装饰器部分 装饰器返回值与函数返回值 混乱了

装饰器函数这样的,计算函数运行时间
def deco(func):
def wrapfunc():
now = time()
func()
times = time() - now
return times #这里返回计算的时间
return wrapfunc
函数是这样的
@deco
def my():
sum = 0
for i in range(100):
sum +=i
print 'sum = ',sum
return sum#返回计算结果
运行被装饰的函数结果如下
my()
sum = 4950
0.016000032424926758
>>> print my()
sum = 4950
0.0309998989105
>>> m = my()
sum = 4950
>>> m
0.015999794006347656
问题是:函数返回的值哪去了?

第1个回答  2012-09-07
@deco
def my():
# your code list

python 会解释成:my = deco(my)
所以你实际上外面调用 my()函数时,调用的是deco 里面的wrapfunc(),返回值就是
wrapfunc()的返回值,即"return times"。
一个函数要返回两个值是不现实的,你的需求可能是同时保存函数值和调用花费的时间
(或者简单的打印出来而已?看你的需求了),略该如下(引入全局变量保存……):

funcall_cost = 0
def deco(func):
def wrapfunc(*args, **kwrags):
global funcall_cost
now = time()
result = func(*args, **kwargs)
funcall_cost = time() - now
return result
return wrapfunc
相似回答