python类不适用于不同的变量
亲爱的专家,我正在尝试编写一个模拟,在我的代码中,我有一个类似这样的类:python类不适用于不同的变量,python,Python,亲爱的专家,我正在尝试编写一个模拟,在我的代码中,我有一个类似这样的类: ... (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,f
... (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显然是全局的,但您没有在任何地方重置它-因此这个循环:
while t < ksimax:
...
正如其他人所提到的,您的代码可以从一些繁重的重构中获益。一些出发点:
命名!xxpyypzzp到底是什么意思?即使你今天很清楚,也一定很难读懂,除非你有像雨人一样的记忆,否则下周你就不会明白。尝试使用描述性名称,如果您发现由于名称不足而向变量添加前缀或后缀,请考虑将这种复杂性封装到类中。似乎后缀xp、x、yp、y、zp、z和tm被大量使用。至少创建一个用于保存这些值的。
全局变量通常为。它们让你很难对代码进行推理——这就是为什么你首先会遇到这个bug的原因。如果您在代码上散布全局语句,那么就有时间重新设计它。思考代码的哪一部分应该拥有状态的哪一部分。
Python有一个编码标准,叫做-阅读它并尝试遵循它。
这不是一门课。你从来没有创建过一个,它也没有方法。此外,在类主体中使用全局是非常奇怪的。你是从哪里学到python类的?像这样的类是不是意味着毫无意义的混乱?一个只有一个静态方法的类是没有意义的;Python不是Java!请提供一个带有合理名称的最小示例,例如…@Eevee,你是什么意思,永远不要创建一个?类定义在那里忽略了奇怪的设计,一个实例在if\uuuu main\uuuuu中实例化。。。布洛克,是的,对不起。但它没有国家;它没有任何作用。您甚至不需要该实例,因为您可以直接在classHi Husnu上调用quad,您解决了问题吗?
counter = 0
def do_something():
global counter
print "Starting at", counter
while counter <= 10:
print counter
counter += 5
print "Done"
do_something()
# Starting at 0
# 0
# 5
# 10
# Done
do_something() # Called again, the counter is at 10 now:
# Starting at 10
# Done