#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
является глобальной переменной.