作为我正在制作的剧本的一部分,我想围绕中心点以逆时针顺序对一系列点进行排序,我们称之为“#”;
我有一个功能可以确定两点' b'如果c位于光线a-> b的右侧或左侧,则为&c;#。这个函数是right_of(a,b,c),它经过测试和工作。
我想使用此函数对具有二维坐标的元组列表进行排序,例如[(0,0),(0,1),(1,1),......]。但是,每次我排序时,都会有一个不同的观点' a'传递给函数right_of()。我想要的是一个'功能' returnSortFunction(a)将返回一个带有两个参数f(b,c)的函数,并且当我对每个坐标调用f(b,c)时,它应该返回right_of的结果(a, b,c)与' a'已经填写了。
我曾尝试使用工厂实现这一点,但我认为我不能正确理解工厂,或者确定这不是工厂的用途。我该如何构建此功能?
答案 0 :(得分:1)
你可以让函数返回一个函数,没问题。一个简单的方法就是
def returnSortFunction(a):
return lambda b,c: right_of(a,b,c)
答案 1 :(得分:1)
你需要一个围绕right_of函数的包装函数。你可以使用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
答案 2 :(得分:1)
函数是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)
这将有效,因为right_of_5将自动填充right_of第一个参数 - a - 数字为5.