Se o valor de retorno de uma função modificada pelo decorador python pode ser apenas Nonetype

Eu escrevi um decorador que obtém o tempo de execução do programa, mas o valor de retorno da função se torna 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

Se eu não usar o decorador, o valor de retorno está correto.

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)

O resultado é:The correct rate is: 0.012400

E se eu usar o 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)

Irá relatar um erro:

contrast run time is: 0.00000 ms

TypeError: must be real number, not NoneType

Claro, se eu remover oprint declaração, posso obter o tempo de execução correto, mas ores aceita o Nonetype.