У меня есть некоторые расчеты по биологическим данным. Каждая функция вычисляет общие, средние, минимальные значения для одного списка объектов. Идея состоит в том, что у меня много разных списков, каждый из которых предназначен для другого типа объекта. Я не хочу повторять свой код для каждой функции, просто меняя линию «за» и вызов метода объекта!Объединение подобных функций в один
Например: функция
Объем:
def calculate_volume(self):
total = 0
min = sys.maxint
max = -1
compartments_counter = 0
for n in self.nodes:
compartments_counter += 1
current = n.get_compartment_volume()
if min > current:
min = current
if max < current:
max = current
total += current
avg = float(total)/compartments_counter
return total, avg, min, max
Сократительная функция:
def get_contraction(self):
total = 0
min = sys.maxint
max = -1
branches_count = self.branches.__len__()
for branch in self.branches:
current = branch.get_contraction()
if min > current:
min = current
if max < current:
max = current
total += current
avg = float(total)/branches_count
return total, avg, min, max
Обе функции выглядят почти одинаково, только немного модификация!
Я знаю, что могу использовать сумму, min, max, ... и т. Д., Но когда я применяю их для своих значений, они занимают больше времени, чем делают их в цикле, потому что их невозможно вызвать сразу.
Я просто хочу знать, если это правильный способ написать функцию для каждого расчета? (т. е. профессиональный способ?) Или, может быть, я могу написать одну функцию и передать список, тип объекта и метод вызова.
Я думаю, теперь я понимаю, что вы имеете в виду под «нельзя назвать сразу», но я d быть крайне скептически, если вы говорите, что перетаскивание 4 вычислений в одну функцию python происходит быстрее, чем 4 встроенных вызова C по тем же данным. Да: он будет перебирать данные 4 раза, НО каждый раз оптимизирован. Мои тесты показывают, что встроенные команды выигрывают каждый раз (см. Мой отредактированный ответ ниже). – smassey
Это должно быть, вероятно, на http: //codereview.stackexchange.com –