gpt4 book ai didi

python - python装饰器修饰的函数返回值是否只能是Nonetype

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:44 25 4
gpt4 key购买 nike

我写了一个装饰器来获取程序的运行时间,但是函数返回值变成了Nonetype。

def gettime(func):
def wrapper(*args, **kw):
t1 = time.time()
func(*args, **kw)
t2 = time.time()
t = (t2-t1)*1000
print("%s run time is: %.5f ms"%(func.__name__, t))

return wrapper

如果我不使用装饰器,返回值是正确的。

A = np.random.randint(0,100,size=(100, 100))
B = np.random.randint(0,100,size=(100, 100))
def contrast(a, b):
res = np.sum(np.equal(a, b))/(A.size)
return res

res = contrast(A, B)
print("The correct rate is: %f"%res)

结果是:正确率是:0.012400

如果我使用装饰器:

@gettime
def contrast(a, b):
res = np.sum(np.equal(a, b))/len(a)
return res

res = contrast(A, B)
print("The correct rate is: %f"%res)

会有报错:

contrast run time is: 0.00000 ms

TypeError: 必须是实数,不是 NoneType

当然,如果我删除 print 语句,我可以获得正确的运行时间,但是 res 接受 Nonetype。

最佳答案

由于包装器取代了修饰的函数,它还需要传递返回值:

def wrapper(*args, **kw):
t1 = time.time()
ret = func(*args, **kw) # save it here
t2 = time.time()
t = (t2-t1)*1000
print("%s run time is: %.5f ms"%(func.__name__, t))
return ret # return it here

关于python - python装饰器修饰的函数返回值是否只能是Nonetype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52214720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com