Я хочу использовать частичное из functools, чтобы частично применить второй аргумент функции, я знаю, что это легко сделать с лямбдой, а не с частичным, как показано ниже.
>>> def func1(a,b):
... return a/b
...
>>> func2 = lambda x:func1(x,2)
>>> func2(4)
2
но я строго хочу использовать здесь частичное (ради обучения), поэтому я придумал это.
>>> def swap_binary_args(func):
... return lambda x,y: func(y,x)
...
>>> func3 = partial(swap_binary_args(func1),2)
>>> func3(4)
2
Можно ли расширить эту стратегию до уровня, на котором я могу частично применять любые аргументы в любом месте, как в следующем псевдокоде
>>>def indexed_partial(func, list_of_index, *args):
... ###do_something###
... return partially_applied_function
>>>func5=indexed_partial(func1, [1,4,3,5], 2,4,5,6)
в нашем случае я могу использовать эту функцию следующим образом
>>>func6=indexed_partial(func1, [1], 2)
Возможно ли иметь индексированное частичное, как я хочу? есть ли что-то похожее на это, о чем я не знаю? и, что более важно, является ли идея индексированного частичного в целом хорошей или плохой идеей, почему?
Этот вопрос был помечен как возможный дубликат Можно ли частично применить второй аргумент функции, которая не принимает аргументы ключевого слова? в этом вопросе. ОП спросил, можно ли частично применить второй аргумент, но здесь я спрашиваю, как приготовить функцию, которая может частично применить любой произвольный аргумент
functools.partial
допускает их, и именно так вы справитесь с этим в реальном коде, хотя, возможно, это не подойдет для вашего упражнения. - person jwilner   schedule 10.04.2015inspect.getargspec
и связывание с использованием имен аргументов. - person tzaman   schedule 10.04.2015partial
. - person haavee   schedule 10.04.2015