Это мой первый вопрос, поэтому я искренне приношу свои извинения за любые ошибки в публикации, которые, я уверен, я сделаю. Сначала я просмотрел ранее ответившие вопросы, но я не нашел подходящего решения, хотя я понимаю, что, возможно, я не искал правильную терминологию или ключевые слова.Как реализовать варианты/варианты функции
У меня есть общая функция, которую я бы хотел быстро оценить в Python. Он передается оптимизатору (fmin_cobyla), и я предпочел бы, чтобы он принимал только один аргумент. Я хотел бы иметь возможность использовать различные варианты (варианты? Ароматы?) Этой функции, которые могут контролироваться флагом. Так как я хочу это быстро оценили это не имеет смысла иметь кучу или, если это случай заявления внутри функции (? Справа), так что в настоящее время у меня есть, если заявления вокруг определений функции вариантов:
if flag==1:
def f(x):
for i in range(0,len(x)*3,3):
A[i:i+3,i:i+3]=1/x[i/3]*np.eye(3)
tmp=np.linalg.solve(A,b)
y=somecmodulefunction(tmp)
return y
elif flag==2:
def f(x):
for i in range(0,len(x)*3,3):
A[i:i+3,i:i+3]=x[i/3]*np.eye(3)
tmp=np.linalg.solve(A,b)
y=somecmodulefunction(tmp)
return y
...
Функции идентичны, за исключением одной строки. Правильно ли это? Так или иначе, чтобы сделать это, чтобы, если у меня есть 10 различных вариантов, это не просто длинный громоздкий блок кода?
Спасибо!
Добавьте параметр 'flag' в функцию, затем добавьте блок' if', чтобы реализовать различное поведение. Попробуйте следовать DRY (не повторяйте себя). – TigerhawkT3
Если функция должна оцениваться 10^10 раз, не было бы, если инструкции в функции замедляли ее оценку? (Я упомянул об этом в исходном сообщении) – omegamanda
Конечно, добавление инструкции замедляло бы ее с помощью ненулевой суммы, но если вы беспокоитесь о производительности, полученной от простого 'if boolean_value', вы должны написать программу в C. – TigerhawkT3