Моя версия Python — 3.8.2, и я использую Visual Studio Code 1.43.1 для написания своего кода. Я оцениваю значение числа пи, используя метод Монте-Карло.
Оказывается, когда я использую random.random() для генерации случайных чисел, мне требуется примерно 1,4 с в режиме выпуска и 1,6 с в отладчике. Но когда я переключаю random.random() на random.uniform(0,1), это занимает примерно 1,9 с в режиме выпуска и 6,5 с в отладчике.
Я полагаю, что время работы будет увеличиваться, потому что каждый раз, когда я генерирую число, функция uniform будет выполнять дополнительные вычисления. Но почему в режиме релиза только небольшое увеличение, а время в отладчике увеличивается почти в 3 раза? Каков механизм этого явления? Или что-то не так с моим отладчиком?
Мой код указан ниже. Я удалил все точки останова в отладчике. Поскольку я новичок в Python, я не сильно менял настройки.
from random import random,uniform
from time import perf_counter
LEN=1000000
COUNT=0
start=perf_counter()
for i in range(LEN):
x,y=uniform(0,1),uniform(0,1) #switch between random() and uniform(0,1)
dist=pow(x**2+y**2,0.5)
if dist<=1.0:
COUNT+=1
pi=4*COUNT/LEN
end=perf_counter()
print("pi={:10f}".format(pi))
print("time consumed:{:f}".format(end-start))
uniform
принимает на два параметра больше, чемrandom
. Возможно, накладные расходы на хранение и поддержку параметров отладчиком объясняют разницу во времени. - person Peter O.   schedule 22.03.2020random.uniform
— это единственная вещь, которую вы вызываете и которая реализована на Python, а не на C, так что это единственная вещь, которую отладчик может реально отлаживать за пределами написанных вами частей. - person user2357112 supports Monica   schedule 22.03.2020uniform
. На этот раз он работает так же медленно, как при использовании встроенногоuniform
. Подтверждает ли это, что разница заключается в двух параметрах, добавленных в служебные данные? @PeterO. - person Meneshail   schedule 22.03.2020