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 шт):

Автор решения: CrazyElf

По умолчанию при печати чисел с плавающей точкой используется экспоненциальная или "научная" нотация. Слишком маленькие числа из формата 0.00001 преобразуются в формат 1e-05. Но вы можете это контролировать. Просто добавьте формат f при печати:

n = 9e-05
print(f'{n = }')
print(f'{n = :f}')

Вывод:

n = 9e-05
n = 0.000090
→ Ссылка