栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在函数中实现脚本。有什么建议吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在函数中实现脚本。有什么建议吗?

这是一个如何从代码中使其成为 函子 对象并使用它的示例,以及对一些我认为值得的其他事情的更改。函子是充当功能的实体,但可以像对象一样对其进行操作。

在Python中,由于函数已经是单例对象,因此两者之间的区别较小,但是有时为一个对象创建专用类很有用。在这种情况下,它允许将辅助函数做成私有类方法,而不是您似乎反对这样做的全局或嵌套方法。

from math import atan2, cos, pi, sinclass GetMinimumAreaRectangle(object):    """ functor to find length, width, and area of the smallest rectangular        area of the given convex hull """    def __call__(self, hull):        self.hull = hull        mostfar = self._mostfar  # local reference        n = len(hull)        min_area = 10**100  # huge value        iL = iR = iP = 1  # indexes left, right, opposite#        print '    {:>2s} {:>2s} {:>2s} {:>2s} {:>9s}'.format(#        'i', 'iL', 'iP', 'iR', 'area')        for i in xrange(n-1): dx = hull[i+1][0] - hull[i][0]  # distance on x axis dy = hull[i+1][1] - hull[i][1]  # distance on y axis theta = pi-atan2(dy, dx)   # get orientation angle of the edge s, c = sin(theta), cos(theta) yC = hull[i][0]*s + hull[i][1]*c xP, yP, iP = mostfar(iP, n, s, c, 0, 1) if i==0: iR = iP xR, yR, iR = mostfar(iR, n, s, c,  1, 0) xL, yL, iL = mostfar(iL, n, s, c, -1, 0) l, w = (yP-yC), (xR-xL) area = l*w# print '    {:2d} {:2d} {:2d} {:2d} {:9.3f}'.format(i, iL, iP, iR, area) if area < min_area:     min_area, min_length, min_width = area, l, w        return (min_length, min_width, min_area)    def _mostfar(self, j, n, s, c, mx, my):        """ advance j to extreme point """        hull = self.hull  # local reference        xn, yn = hull[j][0], hull[j][1]        rx, ry = xn*c - yn*s, xn*s + yn*c        best = mx*rx + my*ry        while True: x, y = rx, ry xn, yn = hull[(j+1)%n][0], hull[(j+1)%n][1] rx, ry = xn*c - yn*s, xn*s + yn*c if mx*rx + my*ry >= best:     j = (j+1)%n     best = mx*rx + my*ry else:     return (x, y, j)if __name__ == '__main__':    hull= [(560023.44957588764, 6362057.3904932579),(560023.44957588764, 6362060.3904932579),(560024.44957588764, 6362063.3904932579),(560026.94957588764, 6362068.3904932579),(560028.44957588764, 6362069.8904932579),(560034.94957588764, 6362071.8904932579),(560036.44957588764, 6362071.8904932579),(560037.44957588764, 6362070.3904932579),(560037.44957588764, 6362064.8904932579),(560036.44957588764, 6362063.3904932579),(560034.94957588764, 6362061.3904932579),(560026.94957588764, 6362057.8904932579),(560025.44957588764, 6362057.3904932579),(560023.44957588764, 6362057.3904932579)]    gmar = GetMinimumAreaRectangle()  # create functor object    print "dimensions and area of smallest enclosing rectangular area:"    print "  {:.3f}(L) x {:.3f}(W) = {:.3f} area".format(*gmar(hull))  # use it

输出:

dimensions and area of smallest enclosing rectangular area:  10.393(L) x 18.037(W) = 187.451 area


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413741.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号