我有3个数学运算函数,我需要在一个point3值上使用。我在想,是否有人能用一种更干净、更简洁的方式来更好地编写这些函数呢?
谢谢。
ptA = [10.0, 20.0, 30]
ptB = [50, 50 ,50]
percent = .50
def addPoint3(ptA,ptB):
idA = ptA[0] + ptB[0]
idB = ptA[1] + ptB[1]
idC = ptA[2] + ptB[2]
return [idA,idB,idC]
def subtractPoint3(ptA,ptB):
idA = ptA[0] - ptB[0]
idB = ptA[1] - ptB[1]
idC = ptA[2] - ptB[2]
return [idA,idB,idC]
def percentagePoint3(ptA,percentage):
idA = ptA[0] * percentage
idB = ptA[1] * percentage
idC = ptA[2] * percentage
return [idA,idB,idC]
add = addPoint3(ptA,ptB)
sub = subtractPoint3(ptA,ptB)
per = percentagePoint3(ptA,percent)
print add,sub,per发布于 2014-03-13 23:24:42
您可以编写一个Point类并实现算术运算符。一个幼稚的例子是:
class Point(object):
def __init__(self, *args):
self.coords = args
def __add__(self, other):
return Point(*[(x + y) for (x, y) in zip(self.coords, other.coords)])
def __repr__(self):
coord = ', '.join("{}".format(x) for x in self.coords)
return "<Point ({})>".format(coord)你可以这样用:
ptA = Point(10.0, 20.0, 30)
ptB = Point(50, 50, 50)
>>> print ptA + ptB
<Point (60.0, 70.0, 80)>您可以将其扩展为使用__sub__和__mul__,并使其更加健壮,因为现在的实现假定了许多事情:
所有这些都可以进行测试,然后推广这些方法。
发布于 2014-03-13 23:12:34
您可以使用zip和清单理解来简化这些操作。例如:
def addPoint3(ptA, ptB):
return [a+b for a, b in zip(ptA, ptB)]或
def percentagePoint3(ptA, percentage):
return [pt * percentage for pt in ptA]您还可以考虑实现类,而不是列表,因此可以将它们定义为实例方法(有关此的示例,请参见Ricardo Cárdenes的答案)。
发布于 2014-03-13 23:19:07
尝试:
[ptA + ptB for ptA,ptB in zip(ptA, ptB)]和更改子字符串的运算符等。
https://stackoverflow.com/questions/22392930
复制相似问题