Я пытаюсь решить следующую проблему в python: у меня есть класс (назовем его Container
), который содержит экземпляры другого класса (скажем, Worker
).У экземпляров Worker
есть метод (find_value
), который оценивает довольно сложную математическую формулу, которая немного отличается для каждого экземпляра, поскольку зависит от их атрибутов.Класс Container
затем содержит метод, который суммирует все вклады из его экземпляров Worker
.На данный момент я реализовал это по существу как цикл for, повторяющийся во всех экземплярах и вызывающий функцию find_value
для каждого.Может быть, это легче понять с помощью небольшого кода:
class Container:
def __init__(self):
# Each worker will have different values for its attributes
self.workers = self.create_workers()
def find_total_value(self, x, y, z):
return sum([w.find_value(x, y, z) for w in self.workers])
class Worker:
def __init__(self):
# Initialise attributes that affect result returned by self.find_value
# will be different for each instance
def find_value(self, x, y, z)
value = # Some complicated mathematical formula based on numpy
# functions that uses the instance attributes
return value
Теперь проблема заключается в следующем: я хочу использовать функцию find_total_value
для численного моделирования (в основном решение дифференциально-зависимого уравнения, зависящего от времени, с помощьюсиппи рутины).Однако цикл for в этой функции сильно замедляет вычисления, как и следовало ожидать.Как только все мои работники созданы, их атрибуты больше не меняются во время симуляции.
Поэтому мой вопрос заключается в следующем: возможно ли каким-то образом сгенерировать функцию find_total_value
как сумму других функций?заранее?Так что функция действует так, как если бы было задействовано только одно огромное математическое выражение (комбинация всех математических выражений find_value
функций экземпляров Worker
? Я не уверен, что здесь используется правильная терминология, поэтомуЯ с удовольствием отредактирую свой вопрос, если понадобятся дальнейшие разъяснения.