繁体   English   中英

转换为功能样式

[英]Converting to Functional style

我在python中编写了以下方法,该方法找到一个平面上2个线段的交集(假设这些线段与x轴或y轴平行)

segment_endpoints = []

def交集(s1,s2):

  segment_endpoints = [] left = max(min(s1[0], s1[2]), min(s2[0], s2[2])) right = min(max(s1[0], s1[2]), max(s2[0], s2[2])) top = max(min(s1[1], s1[3]), min(s2[1], s2[3])) bottom = min(max(s1[1], s1[3]), max(s2[1], s2[3])) if top > bottom or left > right: segment_endpoints = [] return 'NO INTERSECTION' elif top == bottom and left == right: segment_endpoints.append(left) segment_endpoints.append(top) return 'POINT INTERSECTION' else: segment_endpoints.append(left) segment_endpoints.append(bottom) segment_endpoints.append(right) segment_endpoints.append(top) return 'SEGMENT INTERSECTION' 

可以认为它具有良好的功能形式吗? 如果不是,什么是正确的重写功能方法?

我认为代码可以按以下方式重构,但不一定是功能风格。

def intersection(s1, s2):

    left = max(min(s1[0], s1[2]), min(s2[0], s2[2]))
    right = min(max(s1[0], s1[2]), max(s2[0], s2[2]))
    top = max(min(s1[1], s1[3]), min(s2[1], s2[3]))
    bottom = min(max(s1[1], s1[3]), max(s2[1], s2[3]))

    if top > bottom or left > right:
        return ('NO INTERSECTION',dict())
    if (top,left) == (bottom,right):
        return ('POINT INTERSECTION',dict(left=left,top=top))
    return ('SEGMENT INTERSECTION',dict(left=left,bottom=bottom,right=right,top=top))

您正在滥用字符串。 我会考虑返回整数而不是字符串,并定义如下内容:

class IntersectionType:
  NO_INTERSECTION = 1
  POINT_INTERSECTION = 2
  SEGMENT_INTERSECTION = 3

Python 3.4还包含枚举: 如何在Python中表示“枚举”? ...因此,如果您使用的是Python 3.4,那么这将是枚举的用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM