2015-07-07 2 views
-1

У меня есть функция обертки, которая принимает 2 функции в качестве параметров. Обе функции возвращают некоторое значение.Оберните функции и верните окончательное значение

def wrapper(func, some_arg): 
    def wrap(function, *args, **kwds): 
     util_function(some_arg, *args, **kwargs) 
     function(*args, **kwds) //resultB 
    return lambda *x,**k: wrap(func, *x, **k) 
    //return resultB 

Использование -

def exposed_function(argA, argB): 
    wrapper(original_function)(arg1=argA, arg2=argB) 

Пользователь может будет использовать exposed_function

Я должен вернуться resultB в качестве конечной продукции. Как я могу это сделать?

Заранее спасибо.

+1

ли вы имеете в виду вы хотите 'wrapper' вернуть' resultB', или вы хотите обертку вернуть функцию, которая возвращает 'resultB 'когда называется? Пожалуйста, покажите пример того, как вы собираетесь использовать 'wrapper'. – BrenBarn

+0

Я использую обертку как обычную функцию. <\br> Пример - res = wrapper (метод1, метод2). Я хочу res = resultB –

+0

Это не отвечает на вопрос BrenBarn: вы хотите, чтобы 'wrapper' возвращал' resultB', или вы хотите вернуть 'wrap' из' wrapper', а 'wrap' возвращает' resultB'? – Evert

ответ

1

Я не уверен, что полностью понимаю ваш вопрос, но кажется, что вы просто хотите добавить строку return resultB в конце функции wrap.

т.е.

def wrapper(func, pre): 
    def wrap(function, *args, **kwds): 
     resultA = pre() 
     resultB = function(resultA, *args, **kwds) 
     return resultB        # <== newline 

    return lambda *x,**k: wrap(func, *x, **k) 

Тогда это может быть использовано в качестве

wrapped_func = wrapper(func1, func2) 
wrapped_resultB = wrapped_func(args, kwds) 
+0

Я обновил вопрос. Здесь lambda выполняет функции. Я могу только вернуть результат после выполнения лямбда –