timeit: некорректно отображается время
Запускаю 2 теста с timeit, но во 2 тесте показывает 9 секунд каждый раз, хотя программа выполняется менее секунды:
from timeit import timeit
test_1 = timeit('list(map(str, range(1_000)))', number=1_000)/1_000
test_2 = timeit('[str(number) for number in range(1_000)]', number=1_000)/1_000
print(f'{test_1 = }, map')
print(f'{test_2 = }, list_comprehension')
Выводит результат:
'''
test_1 = 0.00010634980000031646, map
test_2 = 9.471769999981916e-05, list_comprehension
'''
Добавил time.sleep(), чтобы проверить, корректность отображения времени, проблем нет:
code = '''
import time
time.sleep(2)'''
test_sleep = timeit(code, number=1)
print(f'{test_sleep = }')
Результат:
'''
test_1 = 0.00010674629999994067, map
test_2 = 9.203820000038831e-05, list_comprehension
test_sleep = 2.000379500001145
'''
Попробовал перезапустить PyCharm. Первый запуск кода после перезапуска всегда корректно отображается:
'''
test_1 = 0.00014491980000093464, map
test_2 = 0.00011936859999877924, list_comprehension
test_sleep = 2.0003498000005493
'''
Но начиная со 2-3 запуска опять каждый раз показывает по 9 секунд во 2 тесте. Не понимаю в чём проблема
Ответы (1 шт):
По умолчанию при печати чисел с плавающей точкой используется экспоненциальная или "научная" нотация. Слишком маленькие числа из формата 0.00001
преобразуются в формат 1e-05
. Но вы можете это контролировать. Просто добавьте формат f
при печати:
n = 9e-05
print(f'{n = }')
print(f'{n = :f}')
Вывод:
n = 9e-05
n = 0.000090