그래서 나는 똑똑하고 DRY 비슷한 기능들로부터 많은 공통 코드를 제거하고 그것들을 한 곳에서 정의 된 도우미 기능으로 바꾸어 놓았다고 생각했습니다. (GitHub diff 참조) 그런 식으로 그들은 모두 한 곳에서 수정할 수 있습니다. 이도우미 함수에서 조기에 반환하는 방법은 무엇입니까?
func_A(stuff):
if stuff == guard_condition:
return early
things = boilerplate + stuff
do A-specific stuff(things)
return late
func_b(stuff):
if stuff == guard_condition:
return early
things = boilerplate + stuff
do B-specific stuff(things)
return late
그래서 원래
을 (another GitHub diff 참조) 나는
_helper(stuff):
if stuff == guard_condition:
return early
things = boilerplate + stuff
return things
func_A(stuff):
things = _helper(stuff)
do A-specific stuff(things)
return late
func_B(stuff):
things = _helper(stuff)
do B-specific stuff(things)
return late
로 변경하지만 나는 그것을 시도하고 깨달았 나는 조기 반환 ("가드"를 이동했기 때문에 ?) 도우미 기능에 그들은 물론 더 이상 작동하지 않았습니다. 이제는 원래 함수에 코드를 추가하여 이러한 문제를 쉽게 처리 할 수 있었지만 복잡성을 다시 개별 함수로 옮기고 반복적으로 반복 할 필요는 없습니다.
이런 상황을 처리하는 가장 우아한 방법은 무엇입니까?
오,이게 데코레이터입니다. – endolith
[가드를 구현하기 위해 파이썬 데코레이터 사용하기] (http://www.siddharta.me/2006/12/using-python-decorators-to-implement.html) – endolith
아,하지만 래핑 할 함수가 다른 수의 인수를 사용하는 경우 , 당신은'* args'를 데코레이터에서 사용할 필요가 있습니다. 그러면 함수 시그니처가됩니다. 이것은 추한 것입니다. – endolith