新手在这里,所以请保持温柔。我正在使用网格物体,我有一组不可变列表(元组),它们包含原始输入网格的属性。这些列表以及原始网格用作组织指南,以便密切关注新创建的子网格;即,由于子网格引用原始网格,因此其属性(列表)可用于在子网格之间进行引用,或者用于创建子网格的子网格。贝娄列出了其中一些列表的结构:
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
,并且这些列表在开头很大且未知。
我尝试过使用类,但是由于我对它们的了解有限,我遇到了同样的问题。有人可以给我一些关于在哪里查找解决方案的建议吗?
谢谢!
答案 0 :(得分: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
如果您想指定 last 参数,可以使用关键字参数或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