i el valor de retorno de una función modificada por el decorador de python solo puede ser Nonetype
Escribí un decorador que obtiene el tiempo de ejecución del programa, pero el valor de retorno de la función se convierte en 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
Si no uso el decorador, el valor de retorno es correcto.
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)
El resultado esThe correct rate is: 0.012400
Y si uso el decorador:
@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)
Habrá un error:
contrast run time is: 0.00000 ms
TypeError: must be real number, not NoneType
Por supuesto, si elimino elprint
, puedo obtener el tiempo de ejecución correcto, pero elres
acepta el Nonetype.