Я пишу код Python, который включает функции с двумя наборами параметров. Первый набор параметров будет меняться каждый раз при вызове функции. Второй набор параметров будет одинаковым для больших групп вызовов функций (например, они меняются каждые 10 000 вычислений функции). Я надеюсь написать эту функцию таким образом, чтобы условная логика выполнялась только один раз при изменении значений второго набора параметров. Я включил некоторый код, который, по моему мнению, может работать, но после некоторого тестирования с модулем времени улучшение кажется очень небольшим. Действительно ли этот код делает то, что я описываю? А если нет, есть ли способ сделать это в Python?
Код: Выделить всё
def preprocessor (parameter_array):
# example parameters
condition = parameter_array[0]
index = parameter_array[1]
def f (x_array):
result = 0
if (condition):
result += x_array[index] ** 2
else:
result += x_array[index] - 5
#.
#.
#.
return result
return f
# define some test parameters
test_parameters = [True, 1]
# run the function 100000 times with these parameters
function = preprocessor(test_parameters)
sum = 0
for i in range(100000):
sum += function([i, i])
print(sum)
Я надеюсь, что, написанный таким образом, оператор if будет оцениваться только всякий раз, когда я вызываю функцию препроцессора. Таким образом, ускоряется вычисление цикла for, в котором меняются только значения x. Для этого потребовалось около 0,024 секунды, в то время как для запуска элемента управления потребовалось около 0,028 секунды. Я также включил код, который использовал для элемента управления ниже (для удобства чтения все без модуля времени).
Код: Выделить всё
def f (x_array, parameter_array):
# example parameters
condition = parameter_array[0]
index = parameter_array[1]
result = 0
if (condition):
result += x_array[index] ** 2
else:
result += x_array[index] - 5
#.
#.
#.
return result
# define some test parameters
test_parameters = [True, 1]
# run the function 100000 times without using the preprocessed function
sum = 0
for i in range(100000):
sum += f([i, i], test_parameters)
print(sum)
Спасибо за помощь,
Джек
Подробнее здесь:
https://stackoverflow.com/questions/786 ... tional-log