Подтвердить что ты не робот

Как связать аргументы с заданными значениями в функциях Python?

У меня есть ряд функций с комбинацией аргументов positional и keyword, и я хотел бы привязать один из своих аргументов к заданному значению (которое известно только после определения функции). Есть ли общий способ сделать это?

Моя первая попытка:

def f(a,b,c): print a,b,c

def _bind(f, a): return lambda b,c: f(a,b,c)

bound_f = bind(f, 1)

Однако для этого мне нужно знать точные аргументы, переданные в f, и не могут использовать одну функцию для связывания всех функций, которые меня интересуют (поскольку они имеют разные списки аргументов).

4b9b3361

Ответ 1

>>> from functools import partial
>>> def f(a, b, c):
...   print a, b, c
...
>>> bound_f = partial(f, 1)
>>> bound_f(2, 3)
1 2 3

Ответ 2

Вероятно, вы хотите partial функцию functools.

Ответ 3

Как было предложено MattH answer, functools.partial - это путь.

Однако ваш вопрос можно прочитать как "как я могу реализовать partial". Недостаток вашего кода заключается в использовании *args, **kwargs - 2 таких применений, на самом деле:

def partial(f, *args, **kwargs):
    def wrapped(*args2, **kwargs2):
        return f(*args, *args2, **kwargs, **kwargs2)
    return wrapped