首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >+-*的python凝聚函数

+-*的python凝聚函数
EN

Stack Overflow用户
提问于 2014-03-13 23:10:03
回答 4查看 325关注 0票数 1

我有3个数学运算函数,我需要在一个point3值上使用。我在想,是否有人能用一种更干净、更简洁的方式来更好地编写这些函数呢?

谢谢。

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-13 23:24:42

您可以编写一个Point类并实现算术运算符。一个幼稚的例子是:

代码语言:javascript
复制
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)

你可以这样用:

代码语言:javascript
复制
ptA = Point(10.0, 20.0, 30)
ptB = Point(50, 50, 50)
>>> print ptA + ptB
<Point (60.0, 70.0, 80)>

您可以将其扩展为使用__sub____mul__,并使其更加健壮,因为现在的实现假定了许多事情:

  • 你总是要加点(例如,如果你加一个整数,这就会中断)
  • 两个点都是同一维数

所有这些都可以进行测试,然后推广这些方法。

票数 4
EN

Stack Overflow用户

发布于 2014-03-13 23:12:34

您可以使用zip清单理解来简化这些操作。例如:

代码语言:javascript
复制
def addPoint3(ptA, ptB):
    return [a+b for a, b in zip(ptA, ptB)]

代码语言:javascript
复制
def percentagePoint3(ptA, percentage):
    return [pt * percentage for pt in ptA]

您还可以考虑实现类,而不是列表,因此可以将它们定义为实例方法(有关此的示例,请参见Ricardo Cárdenes的答案)。

票数 5
EN

Stack Overflow用户

发布于 2014-03-13 23:19:07

尝试:

代码语言:javascript
复制
[ptA + ptB for ptA,ptB in zip(ptA, ptB)]

和更改子字符串的运算符等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22392930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档