将默认参数传递给Python中的函数

时间:2013-08-26 09:20:43

标签: python default-arguments

新手在这里,所以请保持温柔。我正在使用网格物体,我有一组不可变列表(元组),它们包含原始输入网格的属性。这些列表以及原始网格用作组织指南,以便密切关注新创建的子网格;即,由于子网格引用原始网格,因此其属性(列表)可用于在子网格之间进行引用,或者用于创建子网格的子网格。贝娄列出了其中一些列表的结构:

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,并且这些列表在开头很大且未知。

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

谢谢!

1 个答案:

答案 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