Время Python процедура моей собственной функцией - PullRequest
0 голосов
/ 10 января 2019

Я определил здесь функцию для вычисления времени выполнения процедуры 'p'.

def timeit(p):
    a=time.clock()
    p
    b=time.clock()
    print(b-a)

Затем я использую другую функцию для проверки.

d=pd.DataFrame({'x':np.random.randint(1,100,10000)})
d['s']=None
def f1():
    for i in range(10000):
        if d.iloc[i,0]<60:
            d.iloc[i,1]='under'
        elif d.iloc[i,0]<80:
            d.iloc[i,1]='ok'
        else:
            d.iloc[i,1]='best'

Используйте мое время:

timeit(f1())         
5.140552730154013e-07

Результат абсолютно неверный. Зачем? Есть ли проблема в моей грамматике? Истинное время:

a=time.clock()
f1()
b=time.clock()
b-a
Out[26]: 5.914697663515881

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Это неправильно, потому что ваш код f1() фактически не запускается между двумя clock() командами. f1() оценивается до вызова на timeit, а не внутри вызова. См. здесь для получения дополнительной информации.

0 голосов
/ 10 января 2019

timeit(f1()) вызывает f1 до , передавая его возвращаемое значение timeit, поэтому то, что вы на самом деле измеряете, это просто накладные расходы при вызове time.clock дважды.

Вам нужно передать саму функцию и вызвать ее в timeit, между вызовами time.clock():

def timeit(p):
    a=time.clock()
    p()              # call it here
    b=time.clock()
    print(b-a)

timeit(f1)           # NOT here

Если вам нужно передать аргументы позже, вы можете использовать *args / **kwargs или переписать timeit как декоратор .

def timeit(func, *args, **kwargs):
    a = time.clock()
    func(*args, **kwargs)
    b = time.clock()
    print(b - a)
...