【发布时间】:2013-12-10 14:59:18
【问题描述】:
我有一个包含 9 个元素的列表。前三个代表位置、下一个速度、下一个力。
有时我需要来自阵列的力,有时需要速度,有时需要位置。
于是我写了一个函数如下:
def Extractor(alist,quantity):
if quantity=='positions':
x = alist[0]
y = alist[1]
z = alist[2]
return (x,y,z)
elif quantity=='velocities':
vx = alist[3]
vy = alist[4]
vz = alist[5]
tot_v = np.sqrt(vx**2 + vy**2 + vz**2)
return (vx,vy,vz,tot_v)
elif quantity=='forces':
fx = alist[6]
fy = alist[7]
fz = alist[8]
tot_f = np.sqrt(fx**2 + fy**2 + fz**2)
return (fx,fy,fz,tot_f)
else:
print "Do not recognise quantity: not one of positions, velocities, force"
但是,由于重复代码,这对我来说似乎是一种巨大的代码气味。有没有更好,更蟒蛇的方式来做到这一点?我对 OOP 很陌生,但是我可以使用某种利用多态性的类继承吗?
【问题讨论】:
-
创建三个函数。
-
顺便说一下,像
Extractor这样的大写名称通常用于类,而不是函数。这是一个约定,而不是要求,但使用它可以让人们更轻松地阅读您的代码。 -
可以考虑使用
x, y, z = alist[0:3],这样可以减少代码大小。 -
将所有这些值放在同一个数组中好吗?似乎它迫使你做不必要的工作,除非它有一些我没有看到的好处。
标签: python oop code-duplication