生成逆時針排序的函數

2024-09-30 19:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

作为我正在编写的脚本的一部分,我想围绕一个中心点按逆时针顺序排列一系列点,我们称之为“a”。你知道吗

我有一个函数,用于确定两点“b”和“c”,c是在光线a->;b的右侧还是左侧。此函数位于(a,b,c)的右侧,它经过测试并正常工作。你知道吗

我想用这个函数对二维坐标的元组列表进行排序,例如[(0,0),(0,1),(1,1),…]。但是,每次排序时,都会有一个不同的点'a'传递给函数right\u of()。我想要的是一个'function'returnSortFunction(a),它将返回一个带有两个参数的函数f(b,c),当我排序时对每对坐标调用f(b,c)时,它应该返回(a,b,c)的右_的结果,并且已经填充了'a'。你知道吗

我试着用一个工厂来实现这一点,但我认为我对工厂的理解不够好,无法正确地做到这一点,也无法确定这是否不是一个工厂的目的。如何构建此功能?你知道吗


Tags: of函数gtright脚本列表参数排序
3条回答

你可以让一个函数返回一个函数,没问题。一个简单的方法是

def returnSortFunction(a):
    return lambda b,c: right_of(a,b,c)

你需要一个包装器函数围绕你的右函数。你可以用lambda,但我觉得你的逻辑要复杂得多。假设您想将一个函数作为比较器传递给排序方法,它将如下所示:

def returnSortFunction(a):
    def comparator(p1, p2, a = a):
        if p1 == p2:
            return 0
        elif right_of(a, p1, p2):
            return 1
        else:
            return -1
    return comparator

函数是python中的第一类对象,因此可以执行以下操作:

def prepare_funcs(number):
    def inc(a):
        return number + a
    def mult(a):
        return number * a
    return inc, mult

inc5, mult5 = prepare_funcs(5)
inc2, mult2 = prepare_funcs(2)

inc5(2) #Out: 7
mult2(10) #Out: 20

对于特定的上下文,还应该检查functools模块,特别是分部函数。使用它,您可以“部分”准备函数的参数,如下所示:

right_of_5 = functools(right_of, 5)
right_of_5(b, c)

这样就行了,因为第5个参数的右\u将自动用数字5填充第一个参数-a-的右\u。你知道吗

相关问题 更多 >