Функция с двумя этапами для определения параметров - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно определить функции, которые вызываются в два этапа.Первый этап устанавливает только подмножество параметров, а второй этап запускает функцию с некоторыми дополнительными параметрами.

Я не знал, как назвать заголовок этого вопроса.

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

Текущее решение выглядит следующим образом:

def my_function(stage1_param1, stage1_param2):
    return lambda stage2_param1, stage2_param2: my_function_op(stage1_param1, stage1_param2, stage2_param1, stage2_param2)

def my_function_op(stage1_param1, stage1_param2, stage2_param1, stage2_param2):
    # do stuff

Я хотел бы уменьшить шаблон и иметь более компактную версию.

Есть ли лучшее / более короткое решение?

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

Я думаю, вы просто ищете частичное применение функции;ваш my_function в некотором смысле является специализированной реализацией functools.partial.

from functools import partial


def my_function_op(p1, p2, p3, p4):
    # do stuff


f = partial(my_function_op, a1, a2)

x = f(a3, a4)  # x = my_function_op(a1, a2, a3, a4)
0 голосов
/ 21 мая 2019

Вы можете просто определить функцию внутри функции:

def my_function(stage1_param1, stage1_param2):
    def stage2(stage2_param1, stage2_param2):
        ...  # do stuff
    return stage2

Затем вы можете использовать my_function следующим образом:

>>> f = my_function("foo", "bar")
>>> f("ham", "spam")

Внутри внутренней функции все аргументыпривязаны к правильным значениям.

Это может быть вложено по мере необходимости, просто не забудьте вернуть определенные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...