2014-11-30 4 views
0

Я пишу программу, которая должна решить задачу, и задача имеет много точек, поэтому я сделал одну функцию для каждой точки.Вызов функций в последовательности

В основной функции, я звоню функции (которые все возвращающее значение) следующим образом:

result = funcD(funcC(funcB(funcA(parameter)))) 

Является ли этот способ функции настройки вызовов правильно и оптимальным или есть способ лучше?

+0

это зависит от того, что вы это делать. Это вполне допустимо, но, возможно, не лучший дизайн, если эти функции всегда вызываются в таком порядке. –

+0

Да, они всегда называются таким образом. Любой лучший способ? – user3603880

+0

Я думаю, что в этом случае вы должны использовать класс и методы. –

ответ

1

В этом нет ничего плохого. Вы можете улучшить читаемость, вместо этого назовите их следующим образом:

resultA = funcA(parameter) 
resultB = funcB(resultA) 
resultC = funcC(resultB) 
resultD = funcD(resultC) 

Но это действительно только вопрос личных предпочтений и стиля.

1

Если то, что они делают и то, что они возвращают, фиксировано, то и зависимость между ними фиксирована. Таким образом, вы не имеете другого способа позвонить в этот порядок. В противном случае невозможно сказать, не зная, что они делают.

ли вы прикрепить ссылку на частичные результаты:

result1 = funcA(parameter) 
#... 
result = funcD(result3) 

или называть их, как вы представили в вашем вопросе не делает существенной разницы.

2

Во-первых, как и все остальные, ваша реализация полностью действительна и разделена на несколько строк - хорошая идея улучшить читаемость.

Однако, если есть еще более 4 функции, у меня есть лучший способ сделать ваш код более простым.

def chain_func(parameter, *functions): 
    for func in functions: 
     parameter = func(parameter) 
    return parameter 

Это основано на том, что python может передавать функцию как переменную и называть ее другой функцией.

Чтобы использовать его, просто в chain_func(parameter, funcA, funcB, funcC, funcD)

+0

@chepner Порядок вызова функции funcA -> funcB -> funcC -> funcD. – owenwater

+0

@chepner И 'chain_func' вызывает каждую функцию в параметре по порядку, указанному в вызывающем абоненте, который должен быть' chain_func (параметр, funcA, funcB, funcC, funcD) ' – owenwater

+0

Бах, я несколько раз смотрел на него, и все еще был убежден, что это неправильный порядок. Сожалею. – chepner

Смежные вопросы