Передача аргументов по умолчанию для функций в Python
Новичок здесь, поэтому, пожалуйста, будьте нежны. Я работаю с сетками, и у меня есть набор неизменяемых списков (кортежей), которые содержат атрибуты исходной входной сетки. Эти списки, а также исходная сетка используются в качестве организационного руководства для отслеживания вновь созданных подсетей; т. е. поскольку вложенные сетки ссылаются на исходную сетку, ее атрибуты (списки) могут использоваться для ссылки между промежуточными ячейками или для создания вложенных подсетей. Ниже приведены структуры некоторых из этих списков:
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 ответ
Что вы хотите, чтобы получить 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
Если вы хотите указать последние параметры, вы можете использовать ключевые аргументы или 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