Проблема с Timeit — временем обработки — странное число

#python-3.x #timeit

#python-3.x #timeit

Вопрос:

В основном у меня есть файл, в котором есть код для вычисления времени некоторого процесса. Но это работает неправильно. Просто сработает, если я помещу содержимое функций в свой main.

Неправильное вычисление из файла util.py

 import timeit

start_process = 0
finish_process = 0

def starting_process():
    start_process = timeit.default_timer()

def time_process():
    finish_process = timeit.default_timer()
    time_total = finish_process - start_process

    # output running time in a nice format.
    mins, secs = divmod(time_total, 60)
    hours, mins = divmod(mins, 60)

    return "Total running time: %d:%d:%d" % (hours, mins, secs)
  

В процессе, который тратит 4 секунды, это показывает мне вот так: 238: 23:55

Если я помещу этот код в свой основной без функций, он будет отображаться правильно: 0: 0: 4

Кто-нибудь может помочь в том, почему это происходит?

Спасибо,

Lucas Antoni.

Ответ №1:

Эта функция:

 def starting_process():
    start_process = timeit.default_timer()
  

создает локальную переменную start_process , задает значение, затем возвращает None (поскольку нет явного оператора return). Значение теряется при завершении функции. Функция не влияет на глобальную переменную start_process .

Итак, при time_process() вызове выражение, которое использует start_process , видит, что в time_process нет локальной переменной с таким именем, но вместо этого находит глобальную переменную, для которой установлено значение 0.

Одним из способов исправить это было бы использовать

 def starting_process():
    global start_process
    start_process = timeit.default_timer()
  

чтобы сообщить, starting_process что переменная start_process является глобальной переменной.