亲爱的专家,我正在尝试编写一个模拟,在我的代码中,我有这样一个类:
... (some def are here)
class multipole:
global xxp,yyp,zzp,x,y,z,xp,yp,zp,t,tm,h
xxp,yyp,zzp,x,y,z,xp,yp,zp =xxpyypzzp() # some initial values calling
@staticmethod
def quad(f1, f2,f3):
global t,h,mass,ksimax
while t < ksimax:
rk4_two(t,h,mass, f1, f2, f3, xxp, yyp, zzp) # rk function for new xxp, yyp and zzp
t = t + h
tm.append(t)
xp.append(xxp[1])
x.append(xxp[0])
yp.append(yyp[1])
y.append(yyp[0])
zp.append(zzp[1])
z.append(zzp[0])
return xp, x, yp,y,zp,z,tm
if __name__ == "__main__":
qp=multipole()
quxp, qux, quyp,quy,quzp,quz,qutm=qp.quad(0.,0.,0.)
hxp, hx, hyp,hy,hzp,hz,htm =qp.quad(0.022,0.,0.)
oxp, ox, oyp,oy,ozp,oz,otm =qp.quad(-0.023,-0.032,0.0 )
我的问题是这个代码只计算(quxp,qux,quyp,quy,quzp,quz,qutm),而不计算其他代码(其他代码将转换相同的值quxp,qux,quyp,quy,quzp,quz,qutm),你能告诉我为什么吗?我是python新手,如有任何意见,将不胜感激。你知道吗
忽略这段代码是。。。有点缺陷。我认为问题是您使用的
t
显然是全局的,但是您没有在任何地方重置它-所以这个循环:将只运行一次,除非在某个地方重置
t
。一些伪代码解释了为什么会发生这种情况:正如其他人所提到的,您的代码可以从一些繁重的重构中获益。一些出发点:
xxpyypzzp
是什么意思?即使今天对你来说很明显,但即使对你来说也一定很难阅读,除非你有像雨人一样的记忆力,否则下周你将无法理解这一点。尝试使用描述性名称,如果您发现自己因为名称用完而向变量添加前缀或后缀,请考虑将这种复杂性封装到类中。似乎后缀xp
、x
、yp
、y
、zp
、z
和tm
被大量使用。至少创建一个named tuple来保存这些值。你知道吗global
语句,那么就有时间重新设计它。想想你的代码的哪一部分应该“拥有”州的哪一部分。你知道吗相关问题 更多 >
编程相关推荐