вызвать функцию в синтаксисе Python - PullRequest
1 голос
/ 25 ноября 2010

Эй, я пишу небольшую программу на Python 2.6, и я определил 2 вспомогательные функции, которые делают почти все, что я хочу, например

def helper1:
    ...


def helper2:
    ...

Теперь моя проблема в том, что я хочу создать новую функцию, которая объединит две функции в одну функцию, поэтому мне не нужно писать (в оболочке):

list(helper1(helper2(argument1,argument2)))

но вместо этого просто

function(argument1,argument2)

Есть ли какой-нибудь короткий путь? Я новичок в Python, или вам нужно больше примеров кода, чтобы иметь возможность ответить?

Заранее благодарим за любые подсказки или помощь

Ответы [ 3 ]

8 голосов
/ 25 ноября 2010
def function(arg1, arg2):
    return list(helper1(helper2(arg1, arg2)))

должно работать.

2 голосов
/ 25 ноября 2010

Это пример функции высшего порядка compose.Удобно располагать вокруг

def compose(*functions):
    """ Returns the composition of functions"""
    functions = reversed(functions)
    def composition(*args, **kwargs):
        func_iter = iter(functions)
        ret = next(func_iter)(*args, **kwargs)
        for f in func_iter:
            ret = f(ret)
        return ret
    return composition

Теперь вы можете написать свою функцию как

function1 = compose(list, helper1, helper2)
function2 = compose(tuple, helper3, helper4)
function42 = compose(set, helper4, helper2)

и т. Д.

2 голосов
/ 25 ноября 2010
function = lambda x, y: list(helper1(helper2(x, y)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...