我是否通过在类中传递self
参数来产生开销?
我写了一个用于拟合数据的类。在类中有几个辅助函数,它们共同构成了适合的方程组。方便的是可重用性,我可以做myclass.get_data()
和my_class.fit_data()
等等。但是,我担心我实现代码的方式可能产生开销(一些函数被调用50000次)。 E.g:
以下函数计算我系统中的一个变量:
def get_qs(self,x,cp,cs):
qs = fsolve(self.make_qs,50.,args = (x,cp,cs))
return(qs)
它调用make_qs
:
def make_qs(self,qs,x,cp,cs):
q0 = x[3*self.n_comp]
# generates the implicit equation for qs (capacity of salt)
denom = self.get_denom(qs,x,cp,cs)
F = q0*cs/denom - qs
return(F)
它自己调用get_denom
def get_denom(self,qs,x,cp,cs):
k = x[0:self.n_comp]
sigma = x[self.n_comp:2*self.n_comp]
z = x[2*self.n_comp:3*self.n_comp]
# calculates the denominator in Equ 14a - 14c (Brooks & Cramer 1992)
a = (sigma + z)*( k*(qs/cs)**(z-1) )*cp
denom = np.sum(a) + cs
return denom
我考虑过在Fortran中编写函数,并将最终结果传递给Python中的cost函数。
答案 0 :(得分:1)
如果你担心表现,你应该:
MyClass.make_qs(*args)
,... 我认为即使超过50k +的调用,传递self也会产生非常非常非常非常低的开销,因为在Python中查看Web应用程序时,他们使用的不是一个而是使用很多类(使用“自我开销”)他们可以很快地为数十亿的请求提供服务。