0

这里是新手,所以请温柔。我正在使用网格,并且我有一组不可变列表(元组),其中包含原始输入网格的属性。这些列表以及原始网格被用作组织指南,以密切关注新创建的子网格;即由于子网格引用原始网格,其属性(列表)可用于在子网格之间引用,或创建子网格的子网格。下面列出了其中一些列表的结构:

vertices = [ (coordinate of vertex 1), ... ]
faceNormals = [ (components of normal of face 1), ...]
faceCenters = [ (coordinates of barycenter of face 1), ...]

由于我不熟悉 oop,因此我将脚本组织如下:

def main():
    meshAttributes = GetMeshAttributes()
    KMeans(meshAttributes, number_submeshes, number_cycles)

def GetMeshAttributes()
def Kmeans():
    func1
    func2
    ...
def func1()
def func2()
...
main()

问题是,在 KMeans 中的每个函数上,我都必须将网格的一些属性作为参数传递,而且我不能默认它们,因为它们在脚本开头是未知的。例如,在 Kmeans 中有一个名为 CreateSeeds 的函数:

def CreateSeeds(mesh, number_submeshes, faceCount, vertices, faceVertexIndexes):

最后三个参数是静态的,但我不能这样做:

CreateSeeds(mesh, number_submeshes)

因为我必须放在faceCount, vertices, faceVertexIndexes函数定义中,而这些列表在一开始就很大而且未知。

我尝试过使用类,但在我对它们的了解有限的情况下,我遇到了同样的问题。有人可以给我一些关于在哪里查找解决方案的指示吗?

谢谢!

4

1 回答 1

2

您想要的是获得一个partial功能应用程序:

>>> from functools import partial
>>> def my_function(a, b, c, d, e, f):
...     print(a, b, c, d, e, f)
... 
>>> new_func = partial(my_function, 1, 2, 3)
>>> new_func('d', 'e', 'f')
1 2 3 d e f

如果要指定最后一个参数,可以使用关键字参数或 a lambda

>>> new_func = partial(my_function, d=1, e=2, f=3)
>>> new_func('a', 'b', 'c')
a b c 1 2 3
>>> new_func = lambda a,b,c: my_function(a, b, c, 1, 2, 3)
>>> new_func('a', 'b', 'c')
a b c 1 2 3
于 2013-08-26T09:30:52.240 回答