我正在尝试解决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
函数
用于数值模拟(基本上使用scipy例程求解与时间有关的微分方程)。但是,该函数中的for循环会大大降低计算速度,这可能会让人想到。创建完所有工作人员之后,他们的属性在仿真过程中将不再更改。
所以我的问题是:是否可以预先生成find_total_value
函数作为其他函数的总和?这样,该函数就好像只涉及一个巨大的数学表达式(find_value
实例的Worker
函数的所有数学表达式的组合一样?我不确定是否使用了正确的数学表达式)这里的术语,因此如果需要进一步的说明,我很乐意编辑我的问题。